电脑必备
给部署脚本加了静默安装参数,结果三台机子装到一半卡住了
75 0 13
最近在搞批量部署,客户那边 80 多台机子要统一装一套内部工具链,Win解压缩、7-Zip、几个运行库,还有我们自己写的日志采集客户端。
先说结论:静默安装参数这东西,不能只看官方文档抄,得拿不同版本的安装包实测,而且得看它会不会跟已装组件打架。
踩坑过程
我一开始图省事,直接拿 /S 和 /quiet 往脚本里怼,前两台机子跑得挺顺,到第三台就卡在「正在配置」那一步不动了。等了三分钟没反应,手动结束进程重来,发现它其实已经装了一半,注册表里留了半截记录,再装就提示「已存在更高版本」。
拿三台机子对了一下环境:
- 机器 A:全新系统,装完正常
- 机器 B:装过旧版运行库,静默参数被忽略,弹了 UAC 框
- 机器 C:装过同款软件但版本号略高,安装器直接静默退出,返回码 0,脚本以为成功了
关键发现
- 返回码不能只看 0。有些安装器「已存在」也返回 0,脚本里必须加一步版本号校验,装完再跑一次
wmic product where name like '%xxx%' get version对账。 /S和/quiet不是通用的。NSIS 系用/S,InstallShield 系常用/s /v"/qn",MSI 用/qn,混用就是白跑。我建了个小表格,每个安装包对应哪个参数、返回码含义、装完怎么验,全记下来。- 依赖顺序要卡死。运行库没装完就装主程序,主程序静默安装会直接失败,但日志里只报一个模糊的 1603。
现在的做法
- 每个安装包先在三台不同底子的机子上裸跑一遍,记返回码和安装后版本号
- 脚本里加「装前查版本、装后对版本」两道校验,对不上就停,不往下推
- 日志里把每步的返回码和耗时都打出来,出问题直接翻日志定位
这套跑下来,80 台机子最后只有 2 台需要人工介入,比第一版强太多。
想问下各位:你们批量部署的时候,静默安装的返回码和版本校验是怎么做的?有没有碰到那种「返回 0 但其实没装上」的坑?
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
