Windows 系统下应用的安装文件通常为 MSI(Microsoft Installer) 或者为 EXE(executable file)。从命名角度来看,MSI 作为安装包更为合理,不过按照使用经验来看却不相符,国外两个文件平分秋色,国内几乎是一面倒的用 EXE,两个拓展到底有何区别呢?
MSI 是一个安装程序数据库,其中包含一组安装程序文件以及安装、更新、修改或删除计算机上某些软件所需的所有数据,而 EXE 文件可用于安装和运行应用程序软件,并且还具有用户可以自由与安装程序交互的额外好处。EXE 安装文件时也会调用 MSI 文件。
MSI与EXE对比表
参数 | MSI | EXE |
---|---|---|
意义 | MSI 是指帮助存储有关要安装的文件的数据或信息的数据库文件。 | EXE 有助于访问电子设备中已有的文件。 |
基本使用 | MSI 用于软件开发。 | EXE 几乎可以用于任何事情,而不仅限于软件开发。 |
接口 | MSI 文件被认为具有标准和预定义的 UI,并且易于使用。 | EXE 文件根据硬件或应用程序的类型具有不同的接口。 |
安装附属 | 据说 MSI 文件附带按需安装功能,因此安装的其余部分可以在软件启动后完成。 | EXE 文件没有此功能,因为它必须能够访问所有数据库文件。 |
语言选择 | MSI 文件不提供用户选择的安装语言,即使此功能已合并到 MSI 软件中。 | EXE 文件可帮助用户选择安装语言。 |
可能使用EXE的原因
setup.exe 可以是引导程序或非 msi 安装程序。非 msi 安装程序将从自身提取安装资源并直接管理它们的安装。引导程序将包含 MSI 而不是单个文件。在这种情况下,setup.exe 将调用 Windows Installer 来安装 MSI。
Windows Installer 一次只允许安装一个 MSI。这意味着很难让 MSI 安装其他 MSI(例如 .NET 框架或 C++ 运行时等依赖项)。由于 setup.exe 不是 MSI,因此可用于依次安装多个 MSI。
您可能希望更精确地控制安装的管理方式。MSI 对如何管理安装(包括安装、升级和卸载)有非常具体的规则。setup.exe 可以完全控制软件配置过程。只有当您确实需要额外的控制时才应该这样做,因为它需要大量的工作,而且很难做到正确。
MSI 文件可以编辑,您可以使用 Orca 直接访问 MSI 数据库,或者使用您喜欢的 Windows 黑客方法通过 WindowsInstaller API 对其进行编码。
总结
MSI 作为安装包的标准格式,简化了软件打包过程,也提高了安装到恶意程序的难度。EXE 作为安装包的可塑性比较强,可以客制化程度更高的完成安装,但是需要大量额外工作,从开发者的角度来看,MSI 无疑提供了更高的便捷性,因此 MSI 逐渐变为趋势,从很多软件的安装包也逐渐变为 MSI 就能看出。
至于那些还使用 EXE 的应用,我猜想如果不是为了安装依赖,估计是因为技术迭代的不够快的原因吧。MSI 主要由 Microsoft 制作,用于解决由第三方软件工程师创建的非标准软件安装程序。由于 EXE 文件有时被用作恶意程序的手段,因此使用未知的 EXE 文件可能对您的计算机系统有害,因此安装包改为 MSI 在变得更有必要。
参考资料: