软件吧
登录注册账号
/posts/msi-exe
电脑必备

部署包里混着 MSI 和 EXE,静默安装我拆成两条脚本才跑通

码农小张 81 0 13

先说结论:批量装软件别指望一条命令通吃,MSI 和 EXE 必须分开处理。上周给一批新机器推部署包,踩了坑,记录一下。

场景

部署包里 9 个软件,4 个 MSI、5 个 EXE。一开始图省事,统一写 setup.exe /S,结果 4 个 MSI 装完重启后一个没生效,事件日志里干干净净,连报错都没有。

实测过程

环境:Win10 22H2 三台机(一台虚拟机、两台实体),脚本跑完逐台核对已安装列表,只认「程序和功能」里的条目,不看安装目录是否存在——有的安装包只解压不注册,目录在但没装上。

  • MSI 类:必须走 msiexec /i xxx.msi /qn /norestart,加 /l*v install.log 留日志。用 setup.exe /S 传参给 MSI 时,部分封装包会把参数吃掉,等于什么都没干。
  • EXE 类:参数五花八门,/S、/silent、/VERYSILENT 都见过,甚至同一个厂商不同版本参数还不一样。我的做法是装之前先看安装包属性里的签名信息和厂商文档,拿不准就先用 /S 在虚拟机跑一遍看有没有弹窗。

数据对比

同一批 9 个软件,三台机器:

方案装成数平均耗时
统一 setup.exe /S5/9约 3 分钟
MSI/EXE 分开两条脚本9/9约 4 分钟

多花 1 分钟,省下一轮返工。批量部署最怕的不是慢,是装了一半没装上的静默失败。

两个细节

  1. 每条 msiexec 后面都跟 /norestart,重启统一放到脚本最后一次性做,不然中途重启会打断后面的安装。
  2. 脚本结尾加一步核对:调 wmic product get name(或 PowerShell 的 Get-Package)拉已安装列表,跟预期清单 diff,缺了哪个直接打出来。这一步比人眼翻「程序和功能」靠谱多了。

顺带说一句,部署包里那些压缩日志我是用 7-Zip 命令行批量解的,-o 指定输出目录、-y 覆盖不询问,几百个包几分钟搞定,这块确实比图形界面快。

问一句

你们批量部署时,EXE 的静默参数是靠厂商文档确认的,还是像我一样先拿虚拟机试一遍?有没有碰到过文档写 /S、实际得用 /silent 的坑?

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

社区回应

0 Replies

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

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