WiX项目允许并行安装。

18

我正在为我们的产品创建一个MSI安装包,希望该产品能够实现并行安装。这样我就可以先安装1.0.0版本,然后再添加1.0.1版本,以便两个版本都被安装。

我正在使用WiX创建msi,并想知道如何在Wix中实现此操作?例如:

  • 我是否需要为所有组件创建新的Guid
  • 我应该如何将版本信息添加到Wix或者是否应该完全重命名我的产品?
  • 我该如何创建项目,以便发布新版本需要在Wix项目中进行最小限度的更改

问候, Martijn

2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
11

您应该只需要更改顶层productcode和UpgradeCode GUIDs来使您的两个产品完全无关,并使用Productversion标识版本。您可以在产品之间共享组件guid(这就是合并模块的工作原理),以便安装程序的实质部分(组件定义)无需调整即可共享。

您主要的挑战将是确保这两个解耦的产品不会互相干扰,例如具有相同的默认安装文件夹、开始菜单条目和相同的添加/删除程序条目。您可以通过在ProductName属性中包含产品版本号来实现这一点,在您的安装UI中可能看起来有些技术性,但这并非罕见。


谢谢你的回答!我会将我的进展与你保持最新。 - Gluip
2
我基本上按照您所说的做了:更改了升级代码。除此之外,我还必须更改程序菜单目录(在开始菜单中)的GUID,以便在卸载时删除文件夹(如果我安装了两个版本)。 - Gluip
如果您已安装了版本2,然后想要安装旧版本,例如版本1,会发生什么? - Gilad

0
关于你的第一个问题:不,你不需要这样做。
但是为什么? 我在我的并行场景中对Windows安装程序规则感到困惑。 你真的需要理解组件规则(包括何时需要打破它们)关键路径的概念。WiX不会抽象这些方面。 这个答案已经强调了可能的干扰。 让我们考虑一些例子。
  • 应用程序可执行文件所在组件的GUID无需更改。这违反了组件规则,但是它可以工作,因为产品的两个版本以一种不干扰的方式定义了相同的组件。
  • 两个版本共享的资源不受直接支持。一个著名的例子是使用ProgIDs来使用文件扩展名,如此处所示。

    如果更改GUID(使用“*”GUID时也会发生),则卸载任一版本时将删除扩展名。

    如果不更改GUID,则扩展名将保留,但指向最近安装的版本。您可以选择这个选项作为两个恶魔中较小的那个,至少支持用户按照安装顺序卸载版本的情况。
    这里有一个陷阱:扩展名需要成为组件的关键路径。这使得在并排场景中使用ProgID元素变得棘手,因为如果您不将ProgID元素放在引用文件的相同组件中,则会收到ICE69警告。此外,WiX的实现细节决定了它生成哪个注册表条目将成为关键路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,