【问题标题】:WiX Bootstrapper project structureWiX Bootstrapper 项目结构
【发布时间】:2014-01-24 08:51:19
【问题描述】:
我们有一款类似于 Microsoft Office 的产品。有很多共享库的几个不同的应用程序。我们正在尝试重构该产品的部署过程,因为目前我们正在使用多个单独的 MSI 包来独立安装每个应用程序。在此过程中,我们希望使用 WiX 引导程序来捆绑这些 MSI 文件并仅创建一个设置应用程序。目前所有共享库都包含在每个 MSI 包中,占用大量空间。
我们基本上有两种选择来实现这一点:
- 创建一个 WiX 设置 (MSI) 项目;将所有产品单独包含在内
特征。在这种情况下,处理共享库很漂亮
直截了当。但是项目的结构变得太大了
在我看来。
- 创建多个 MSI 包。每个只有一个
产品并将它们捆绑到引导程序。在我看来,这
方式更灵活,文件排列更清晰
和组件。但是共享库如何在这里工作?他们
不应包含在每个 MSI 文件中。
在 WiX 引导程序项目中首选哪种方法?
【问题讨论】:
标签:
wix
bootstrapper
wix3.8
【解决方案1】:
一个具有许多功能的大型 MSI 难以支持。
在 MSI 之间共享组件很容易。共享组件必须具有相同的 GUID 和组件键路径。见details。
为轻松实现此目标,为所有共享组件(每个组件或组件组在其自己的片段中)创建一个 WiX 库项目。然后将该库包含到所有 WiX Package 项目中,并在 WiX Package 项目中引用其组件(或组件组)。
【解决方案2】:
您可以将共享组件分组到多个 MSI,然后为您的应用程序创建一个或多个引导程序。
需要了解的几个关键事项:
可以配置 MsiPackages,这样当引导程序安装 MSI 时,它会在“程序和功能”(ARP) 列表中显示或不显示 MsiPackage。
MSI 可能有也可能有自己的 UI。在任何情况下,您都可以在 MsiPackage 元素中抑制它。如果您真的非常需要在安装过程中询问用户某些问题,您可以在自定义引导程序应用程序中询问,并可能将其作为 MsiProperty 传递给 MSI。
因此,我建议为每个应用程序和每组共享组件设置一个 MSI。并且,一个或多个引导程序用于一个或应用程序 MSI 和他们需要的共享 MSI。如果您创建 custom bootstrapper application UI(C++ 或 .NET),就像 Visual Studio 和 WiX 本身所做的那样,您的用户可以使用一个引导程序有选择地安装/卸载您的各种应用程序。