基于 MSI 的安装相对于基于 MSI 包装脚本的安装的具体优势?

Specific advantages of MSI based installation over MSI wrapped script based installation?

免责声明:我仍然没有超越最基本的 WiX 教程,因为每次我试图理解这些概念时,我的头都开始旋转。


我一直在阅读 Is it feasible/sensible to wrap an InnoSetup installer inside an MSI for easier distribution via AD? :

所以,鉴于 一直认为安装程序应该做的是:

问题是,鉴于事实证明,只要使用正确的工具,只需将 exe 包装在 MSI 中即可实现上述几点,"real" MSI 软件包提供了哪些额外优势?

这里要明确一点:MSI 包确实(似乎)为企业/AD/GPO 分发提供了额外的好处,如果你有一个裸露的 .exe 安装程序,你就没有这些好处 - 我不知道不要质疑。我感兴趣的是什么 - 实际使用 - 功能只能通过 "real" MSI 包实现?

MSI 支持按需安装附加功能。 MSI 创建的快捷方式 (.lnk) 包含 Windows 识别的特殊 metadata 并且可以自动修复 and/or 安装缺少的功能。

另一个优点是非管理员可以安装补丁without UAC elevation如果包被签名。

MSI 的一些缺点是:

  • 无法为 32 位和 64 位目标创建单个 .msi。
  • 单个 user/non-elevated 安装程序可能会出现问题,因为对此的支持 changed over time 并且已添加新的 MSI 属性。
  • 根据您支持的最低 Windows 版本,您可能有几个主要版本的 MSI test/deal。
  • 在最近版本的 Windows.
  • 上,通过将完整的 .msi 存储在 %windir%\Installer 中使您的系统驱动器膨胀
  • 通过存储有关它安装的每个文件的路径和其他信息使注册表膨胀。
  1. 安装或删除操作是按(产品的)功能进行的。这不像以前那样重要,因为安装人员越来越小,向用户提出的问题越来越少。对于大型安装程序,例如 Visual Studio 和 SQL 服务器,问题是通过引导程序提出的——与您正在考虑的相反。
  2. 安装、修复和删除按组件(跨所有产品和版本)进行。引用计数在 Windows 安装程序的控制下,并且比 Windows 安装程序之前的技术更不容易被破坏。由于 .NET 和免注册 COM 等不同的应用技术,共享组件现在不太常见。大型系统可能会共享组件,但它们可能会再次被分成单独的安装程序,这样一个组件就不需要被多个产品使用。

这些是否是优势取决于您的安装架构的需要。

MSI 支持在不安装可用应用程序的情况下公布它们(this MSDN post 中有更多详细信息)。它在企业环境中很方便,因为它只允许部署最重要的应用程序,并且 1) 在用户计算机上节省物理 space; 2) 减少按用户许可的应用程序的费用(只有那些真正需要该应用程序的人才会实际安装它并激活许可)。