软件吧
登录注册账号
/posts/200-msi-exe
办公软件

给200台机子装软件,静默参数抠了三天,发现MSI和EXE要分开伺候

码农小张 74 0 13

这两天接了个活,给分公司200台机子批量装软件,有内部工具也有第三方客户端。本来以为写好脚本一把梭就行,结果光静默安装参数就抠了三天,踩的坑比预想多得多。

先说结论:MSI 和 EXE 要分开处理,参数不能混用,更不能信网上抄来的万能模板。

我分了三台机子做对照测试:Win10 22H2、Win11 23H2、还有一台没升过补丁的老Win10。结果如下:

  • MSI 包:msiexec /i xxx.msi /qn /norestart 基本通用,但要注意 /qn 和 /qb 的区别——/qb 会弹进度条,如果脚本里带 /qb,远程部署时用户还是会看到窗口,容易以为中毒了。我统一改成 /qn 加 /norestart,装完用 msiexec /x 测卸载,发现卸载参数得单独写 /x {ProductCode},不能跟安装参数混。
  • EXE 包:最坑。不同厂商的静默参数五花八门,/S、/silent、/verysilent、-q、/quiet 都见过,有的还分大小写。我拿一个内部工具试了六种参数,只有 /S 有效,但装完它会自动拉起主程序,得在脚本里加 taskkill 兜底。
  • 带配置文件的安装包:有个客户端要求先放一个 config.ini 到同目录,再用 setup.exe /LOADINF=config.ini 装。我第一次没放文件,装完直接连不上服务器,排查半小时才发现是安装路径被写死到了 C 盘默认目录。

另外两个细节:

  1. 路径带空格一定要加引号,/D= 参数必须放最后,前面不能有别的参数,否则会被吞掉。
  2. 日志要开,/log install.log 或者 /L*v log.txt,不然装失败了只能靠猜。我靠日志定位到一个包在 Win11 上因为 .NET 版本不够直接静默退出,退出码 0,坑死人。

最后脚本跑下来,200 台里有 7 台失败,全是 Win10 老版本缺补丁,补完再跑一遍就过了。

问一句:你们批量部署时,遇到那种死活不认静默参数的 EXE,是拿工具强拆还是直接换安装包? 我手里还压着两个没搞定的,想听听大家的土办法。

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。