运维给了一批补丁包,全是msi,双击有的直接装,有的弹出一堆选项,还有一个双击毫无反应。msi不是普通的可执行文件,它本质是个数据库,装什么、写到哪,全在里面的表里。
msi 和 exe 到底差在哪
exe是程序自己决定怎么装,脚本想干什么就干什么。msi走Windows Installer服务,安装过程由系统统一调度,支持回滚、修复、卸载、静默安装,安装信息记在注册表的Installer分支里。所以msi能用一条命令装完,exe不行,企业批量部署基本只认msi。
最直接的双击与右键安装
双击就是调用Windows Installer。右键菜单里还有安装、修复、卸载。装完想改组件,去控制面板的程序列表里点更改。有的msi带图形界面,有的被设成静默,双击没反应不代表坏了,可能它已经在后台装完,去程序列表看有没有新条目。
命令行 msiexec 才是正路
msiexec /i setup.msi /qn msiexec /i setup.msi /qb msiexec /x setup.msi /qn msiexec /a setup.msi /qb TARGETDIR=C:/out斜杠i是安装,斜杠x是卸载,/qn全程无界面,/qb只显示进度条。斜杠a是管理安装,也就是把msi里的文件按目录结构释放到TARGETDIR,不写注册表,用来解包最方便。要日志就加 /l*v 加日志文件路径,装失败时先看日志里的Return value 3,那一行前面就是真正的原因。
不用命令行也能看内容
7-Zip右键能直接打开msi,像压缩包一样浏览里面的文件和表。LessMSI这个工具更专业,能把文件和解包后的目录一次导出,还能看Property表里的产品码。要改安装参数,用Orca编辑表,改完必须重新签名,否则域环境里会被策略拦。
- 双击没反应:先看是不是已经装过,再试msiexec加参数并写日志。
- 要批量部署:用 /qn 配 /norestart,再通过组策略下发。
- 只想拿文件:用 /a 解包,别先装一遍再满盘找目录。