寂静回声 发表于 昨天 15:08

Windows上msi和exe的安装包有什么区别?

在 Windows 世界里,软件安装主要有两种形式:
一种是 .exe 安装程序,另一种是 .msi 安装包。
虽然二者都能完成安装软件这件事,但它们的定位完全不同。
简单来说:
EXE:普通程序形式的安装器
MSI:Windows 官方的标准化安装数据库
.exe 是 Windows 可执行程序(Executable) 的通用格式。
也就是说,一个 .exe 文件本质上就是一个普通程序,只不过它的功能是 执行软件安装流程。
当你双击 .exe 安装包时,实际上是运行了一个程序,这个程序会:
显示安装向导
解压文件
复制文件到系统目录
写入注册表
创建快捷方式
安装依赖组件
EXE 的最大特点是完全自由。
开发者可以随意设计安装逻辑,比如:
检查系统版本
下载最新组件
在线安装
安装多个程序
自定义 UI
因此很多软件都使用 EXE 安装器,比如浏览器、游戏、驱动程序等。
但缺点也很明显:
系统很难统一管理这些安装程序。
Windows 并不知道 EXE 内部做了什么。

.msi 是 Microsoft Installer 的安装包格式。
它并不是一个普通程序,而是一个 数据库文件,里面记录了完整的软件安装信息,例如:
需要安装哪些文件
文件要复制到哪里
需要创建哪些注册表
需要哪些组件
卸载时要删除哪些内容
真正执行安装的程序是 Windows 自带的:
msiexec.exe
当你双击 .msi 文件时,其实就是调用了:
msiexec /i program.msi
也就是说:
MSI 安装由 Windows 系统统一管理。

MSI 的设计目标是:可管理、可自动化、可维护。
因此它具备很多企业环境需要的能力。
1、统一的安装与卸载
Windows 会记录 MSI 安装的所有组件,因此可以做到:
精确卸载
修复安装
升级软件

2、支持静默安装
MSI 天生支持自动化部署
整个安装过程不会弹出任何界面。
这在 企业批量部署电脑 时非常重要。

3、支持组策略部署
在企业 Windows 域环境中,管理员可以通过 组策略(Group Policy) 直接推送 MSI 软件。
例如:
所有电脑自动安装某个软件
自动升级软件版本
自动卸载旧版本
EXE 通常做不到这一点。

4、支持安装修复
MSI 可以检测软件是否损坏。
如果发现某个文件被删除,Windows 可以自动修复。
这种机制叫:Self-healing(自我修复)

很多软件都会同时提供两种安装包,例如:
software_setup.exe
software_enterprise.msi
它们面向的用户群体不同。
EXE 面向:
普通个人用户
下载安装即可
MSI 面向:
企业 IT 管理员
批量部署电脑
例如公司里有 500 台电脑,管理员不可能手动安装软件,而是会通过域策略直接推送 MSI。

一个很多人不知道的事实是:
很多 EXE 安装包其实只是 MSI 的外壳。
很多安装器,如:
InstallShield
WiX
Inno Setup
NSIS
会把 MSI 打包进 EXE 里。
EXE 的作用只是:
检查系统环境
解压 MSI
调用 msiexec 安装
因此有时候你用解压工具打开 EXE,会发现里面其实藏着 .msi 文件。
比如solidworks安装包里,有各个单独程序的.msi

页: [1]
查看完整版本: Windows上msi和exe的安装包有什么区别?