WiX Bootstrapper 项目结构

Posted

技术标签:

【中文标题】WiX Bootstrapper 项目结构【英文标题】:WiX Bootstrapper project structure 【发布时间】:2014-01-24 08:51:19 【问题描述】:

我们有一款类似于 Microsoft Office 的产品。有很多共享库的几个不同的应用程序。我们正在尝试重构该产品的部署过程,因为目前我们正在使用多个单独的 MSI 包来独立安装每个应用程序。在此过程中,我们希望使用 WiX 引导程序来捆绑这些 MSI 文件并仅创建一个设置应用程序。目前所有共享库都包含在每个 MSI 包中,占用大量空间。

我们基本上有两种选择来实现这一点:

创建一个 WiX 设置 (MSI) 项目;将所有产品单独包含在内 特征。在这种情况下,处理共享库很漂亮 直截了当。但是项目的结构变得太大了 在我看来。 创建多个 MSI 包。每个只有一个 产品并将它们捆绑到引导程序。在我看来,这 方式更灵活,文件排列更清晰 和组件。但是共享库如何在这里工作?他们 不应包含在每个 MSI 文件中。

在 WiX 引导程序项目中首选哪种方法?

【问题讨论】:

【参考方案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 本身所做的那样,您的用户可以使用一个引导程序有选择地安装/卸载您的各种应用程序。

【讨论】:

以上是关于WiX Bootstrapper 项目结构的主要内容,如果未能解决你的问题,请参考以下文章

自定义 Bootstrapper UI,类似于自定义的 wix UI

我可以使用 WiX 创建一个 MSI 来升级使用 Burn Bootstrapper 安装的应用程序吗?

WiX 引导程序项目参考变量

VS2017 Bootstrapper:缺少Engine / setup.bin

WiX-Bootstrapper - 为 UAC 对话框设置产品名称和公司名称

WiX Bootstrapper:如何从命令行设置刻录变量?