`.msi` 是 **Windows Installer 安装包**(Microsoft Installer Package),不是普通压缩包,也不是传统意义上的可执行程序。它本质是一个 **结构化数据库文件**,里面记录:
- 要安装哪些文件、装到哪
- 注册表项、快捷方式、服务、环境变量
- 安装顺序、升级/卸载/修复逻辑
- 自定义动作、安装条件、许可证协议
- 产品代码、升级代码、组件 GUID 等元数据
双击 `.msi` 时,实际是由 Windows 自带的 **Windows Installer 服务**(`msiexec.exe`)来解释执行。命令行常用:
```bat
msiexec /i setup.msi /qn /norestart
msiexec /x setup.msi /qn
msiexec /i setup.msi /l*v install.log
```
`/qn` 静默安装,`/x` 卸载,`/l*v` 详细日志。
## 为什么很多“生产力软件”喜欢用 .msi
核心原因不是“安装包更高级”,而是 **面向企业 IT 批量部署和管理**:
1. **适合企业批量部署**
- 可通过组策略、Microsoft Intune、SCCM/MECM、PDQ Deploy 等统一推送。
- 支持静默安装、指定安装目录、跳过重启等公共属性。
- IT 可以写标准脚本批量装几百几千台机器。
2. **标准化安装/卸载/修复/升级**
- Windows Installer 内置安装、卸载、修复、修改安装组件。
- 支持升级代码、产品代码,便于版本升级和补丁管理。
- 有回滚机制,安装失败可回退。
3. **支持 MST 转换和 MSP 补丁**
- 企业可用 `.mst` 转换文件定制安装选项,而不改原包。
- 补丁可用 `.msp`,便于分发。
4. **组件引用计数和共享文件管理**
- 多个程序共享组件时,Windows Installer 会跟踪引用,避免卸载一个程序误删共享文件。
5. **权限和数字签名较规范**
- MSI 可签名,企业更容易做软件白名单、合规审计和分发控制。
- 安装通常由 Windows Installer 服务执行,权限模型相对统一。
6. **“生产力软件”客户多为企业**
- Office、Visio、Project、部分开发工具、VPN、管理客户端、PDF/办公插件等,企业采购比例高。
- 厂商必须提供 MSI 或企业部署包,否则 IT 部门很难大规模部署。
## 但 .msi 也不是万能
- 复杂安装逻辑不如 EXE 引导程序灵活,常要写自定义动作。
- 需要先装 .NET、VC++ 运行库、在线下载组件时,厂商常用 `.exe` 引导器先检查环境,再调用 MSI。
- 有些软件同时提供 `.exe` 和 `.msi`:EXE 面向普通用户,MSI 面向企业部署。
- `.msi` 不能简单当压缩包解压;可用 Orca 等工具查看数据库表。
总结:`.msi` 是 Windows Installer 的标准安装数据库。生产力软件偏爱它,主要是因为它们要服务企业客户,而 MSI 最适合 **静默安装、批量部署、集中管理、标准化升级卸载和审计**。普通用户看到的 `.exe` 安装包,很多内部其实也会调用 `.msi`。