基于 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? :
- 今天有一个工具(寻找 exemsi MSI 包装器)可以包装基于 script/exe 的安装程序,如 InnoSetup,并提供安装、升级和卸载。
- 根据我的经验,这正是用户所期望的:可以安装产品,较新的设置可以升级它,卸载会删除产品。
- Yet quite a few 对该问题的回答指出,只有 "true" MSI 才能可靠地提供 "all"(?) 所需的 (?) 功能。
所以,鉴于 我 一直认为安装程序应该做的是:
- 尽可能轻松地安装产品
- 允许修复产品(可能只需 运行 重新设置)
- 允许通过较新的设置升级产品
- 最终卸载产品,尽可能少留下痕迹。
问题是,鉴于事实证明,只要使用正确的工具,只需将 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 中使您的系统驱动器膨胀
- 通过存储有关它安装的每个文件的路径和其他信息使注册表膨胀。
- 安装或删除操作是按(产品的)功能进行的。这不像以前那样重要,因为安装人员越来越小,向用户提出的问题越来越少。对于大型安装程序,例如 Visual Studio 和 SQL 服务器,问题是通过引导程序提出的——与您正在考虑的相反。
- 安装、修复和删除按组件(跨所有产品和版本)进行。引用计数在 Windows 安装程序的控制下,并且比 Windows 安装程序之前的技术更不容易被破坏。由于 .NET 和免注册 COM 等不同的应用技术,共享组件现在不太常见。大型系统可能会共享组件,但它们可能会再次被分成单独的安装程序,这样一个组件就不需要被多个产品使用。
这些是否是优势取决于您的安装架构的需要。
MSI 支持在不安装可用应用程序的情况下公布它们(this MSDN post 中有更多详细信息)。它在企业环境中很方便,因为它只允许部署最重要的应用程序,并且 1) 在用户计算机上节省物理 space; 2) 减少按用户许可的应用程序的费用(只有那些真正需要该应用程序的人才会实际安装它并激活许可)。
免责声明:我仍然没有超越最基本的 WiX 教程,因为每次我试图理解这些概念时,我的头都开始旋转。
我一直在阅读 Is it feasible/sensible to wrap an InnoSetup installer inside an MSI for easier distribution via AD? :
- 今天有一个工具(寻找 exemsi MSI 包装器)可以包装基于 script/exe 的安装程序,如 InnoSetup,并提供安装、升级和卸载。
- 根据我的经验,这正是用户所期望的:可以安装产品,较新的设置可以升级它,卸载会删除产品。
- Yet quite a few 对该问题的回答指出,只有 "true" MSI 才能可靠地提供 "all"(?) 所需的 (?) 功能。
所以,鉴于 我 一直认为安装程序应该做的是:
- 尽可能轻松地安装产品
- 允许修复产品(可能只需 运行 重新设置)
- 允许通过较新的设置升级产品
- 最终卸载产品,尽可能少留下痕迹。
问题是,鉴于事实证明,只要使用正确的工具,只需将 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 中使您的系统驱动器膨胀
- 通过存储有关它安装的每个文件的路径和其他信息使注册表膨胀。
- 安装或删除操作是按(产品的)功能进行的。这不像以前那样重要,因为安装人员越来越小,向用户提出的问题越来越少。对于大型安装程序,例如 Visual Studio 和 SQL 服务器,问题是通过引导程序提出的——与您正在考虑的相反。
- 安装、修复和删除按组件(跨所有产品和版本)进行。引用计数在 Windows 安装程序的控制下,并且比 Windows 安装程序之前的技术更不容易被破坏。由于 .NET 和免注册 COM 等不同的应用技术,共享组件现在不太常见。大型系统可能会共享组件,但它们可能会再次被分成单独的安装程序,这样一个组件就不需要被多个产品使用。
这些是否是优势取决于您的安装架构的需要。
MSI 支持在不安装可用应用程序的情况下公布它们(this MSDN post 中有更多详细信息)。它在企业环境中很方便,因为它只允许部署最重要的应用程序,并且 1) 在用户计算机上节省物理 space; 2) 减少按用户许可的应用程序的费用(只有那些真正需要该应用程序的人才会实际安装它并激活许可)。