用友下载完发现文件是0字节,我试了很多次才找到原因
用友下载完发现文件是0字节,我试了很多次才找到原因
头一回碰到这种情况,我差点以为是自己电脑出毛病了。那天公司要装用友T3,我从官网找了个链接点过去,弹出来的是个第三方下载站,页面上密密麻麻的按钮和广告,我好不容易找到那个“下载”按钮,点了之后等着进度条走完。结果到本地一看,文件名倒是对的,后缀.exe也没错,但文件大小是0字节,双击打不开,提示说文件损坏或者无效。我当时就愣了,寻思着是不是下载中途断了,就又试了一次,这回网速稳稳的,下载时间也正常,可还是0字节。
后来我琢磨出点门道来。这种下载站其实是个聚合页面,你点本页下载按钮的时候,它可能跳了好几个链,从不同服务器或者镜像节点拉文件。如果你浏览器装了广告拦截插件或者系统防火墙太严,那个重定向过程可能被中途掐断,结果就是服务器给你返回了一个空文件,但下载器还傻乎乎地把它当正常内容存下来。我试着关了广告拦截和防火墙,再下载一次,这次文件大小变成1.2G了,终于能用。
不过光搞这个还不够,我还发现有种情况是站点用了防盗链机制。像用友这类企业软件,官方其实限制了某些第三方站点的直接下载,你点本页下载按钮的时候,对方后台检测到你的Referrer不是自己域名,就给你返回一个0字节的假文件来防爬。解决办法是换个浏览器,或者复制下载链接到新标签页里打开,手动绕过那个防链。我试了360极速和Chrome两个内核,最后还是用Edge的IE模式才真正拿到完整压缩包。
下载后解压失败,原来是压缩包有双重加密
好不容易搞到非0字节的文件了,我心里松了口气,赶紧双击解压。用的是WinRAR,结果弹出来个弹窗说“文件头部损坏”或者“不可预料的压缩文件末端”。我当时在想,是不是下载过程中丢包了?于是又下了一遍,还故意换了个时间段,半夜凌晨网络空闲时再试,结果还是报错。这就有意思了,文件体积明明和官方标称的完全一样,但解压就是过不去。
我后来跟一个在系统集成公司干了七八年的老哥聊,他说用友以前的安装包有个习惯,就是用两层压缩方式。第一层是标准的ZIP或者RAR,但你解出来之后得到的东西其实不是真正的安装程序,而是一个自解压的.exe文件,这个.exe里面又嵌着安装脚本和数据库组件。如果你直接双击打开那个解出来的.exe,Windows可能会误判为未知程序,然后解压自动中断。正确的做法是先右键点击那个解出来的.exe,选择以管理员身份运行,同时必须确保当前登录账号是真正的管理员,不能只是个标准用户。
我还发现一个细节,有些第三方下载站为了节省服务器空间,会把用友的官方包重新打包,用自己的压缩工具再压一遍,然后在网页上写“解压密码:123456”之类的提示。我第一次没留神,没输入密码硬解,结果就出来一堆0字节的文件和乱码文件夹。后来我仔细看了下载页面的说明,在页面底部灰白小字里果然藏着解压密码,输进去之后才顺利解出真正的安装程序。
安装过程中提示数据库连接失败,环境变量得提前配
解压完安装包之后,我双击装程序,选好安装路径,点了下一步,结果安装到一半突然弹出个错误窗口,说“无法连接到SQL Server”或者“数据库初始化失败”。我当时懵了,因为电脑上明明没有装任何数据库软件。后来一查,用友T3这类产品依赖SQL Server桌面引擎或者完整版SQL Server,大部分人电脑默认没有这个组件。安装程序虽然会帮你自动装一个精简版的MSDE,但这个自动部署很容易失败,尤其在你系统里之前装过其他版本SQL Server残留的情况下。
问题的根子出在环境变量上。用友安装程序在执行数据库配置时,会去注册表里找当前SQL Server的实例名和默认端口。如果你电脑里以前装过MySQL或者Office附带的一个阉割版SQL Server,注册表就被写乱了,新装的MSDE识别不到。我当时花了一下午折腾,最后手动改了注册表的几个项,把HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server里的实例名清干净,又重建了个空实例,才让安装程序正常跑完。
还有一招更省事,就是直接装一个SQL Server 2008 R2 Express,免费版也够用。装好后手动创建一个空数据库,再用用友自带的“系统管理”工具初始化账套。这其实比靠安装程序自动部署更稳,因为Express版是完整的轻量数据库引擎,不会因为权限问题中途卡住。我后来几次给别人装都是用这种方式,从来没再出现数据库连接失败的情况。
系统提示缺少DLL文件,是.NET Framework版本冲突
装到一半,突然屏幕弹出个对话框,说“找不到MSVBVM50.DLL”或者“无法加载RF233856.DLL”,我一看头就大了。这种DLL错误在用友安装过程中非常常见,尤其是老版T3和U8。很多人以为是安装包不完整,就重新下载重装,结果一样。实际上问题出在系统缺少对应的运行时库。
用友T3很多核心功能依赖Visual Basic 6.0运行时,还有早期VC++的库。Windows 10或者11系统默认不预装这些老东西,你得自己去微软官网下个VB6运行库补丁包。我那时候为了省事,直接装了个微软常用运行库合集,把VC++ 2005到2019的所有版本都装齐了,然后再重新运行用友安装程序,DLL报错就再也没见过。
另外一个坑是.NET Framework的版本冲突。用友T3的财务模块需要.NET 3.5 SP1,但Win10默认带的是.NET 4.x,两者可以共存,但前提是必须把3.5的功能打开。我一开始以为装最新版的就行,结果系统管理登录时一直报错,后来在控制面板里把.NET Framework 3.5启用,重启电脑,再进软件就正常了。如果装的是精简版系统或者Ghost版系统,这功能经常是被阉割掉的,得用dism命令行手动从系统镜像里恢复。
加密狗驱动死活装不上,换USB口和禁用签名是关键
安装软件主体之后,接着就要插加密狗。我那次用的是绿色加密狗,插上去Windows提示安装驱动,然后驱动安装进度条走到一半就报错,“设备无法启动”或者“驱动程序签名错误”。我换了三个USB口,前边面板的和机箱后面的都试过,没一个能装成功。
后来查了才知道,用友早期的加密狗驱动没有数字签名,Win10以上系统默认会阻止未签名的驱动加载。你需要进系统的高级启动选项,禁用驱动程序强制签名。过程不复杂,就是按住Shift键同时点重启,进到疑难解答、高级选项、启动设置,开机后按7键禁用签名。驱动装好之后,你再正常启动系统,后面就能正常识别加密狗了。
我还学会一招,先插加密狗再装驱动,或者先装驱动再插加密狗,顺序不同结果会差很多。有经验的人告诉我要先装好用友主程序,把驱动文件夹里的安装文件手动运行一遍,等提示安装成功之后,再插加密狗,这时候Windows就能自动识别到正确驱动了。如果反着来,Windows会先用自己的通用驱动占上位,后面你再想覆盖就麻烦多了。