2011-05-03 78 views
14

我正在为我们的产品创建MSI。我希望产品能够并排安装。因此,我可以先安装1.0.0,然后再安装1.0.1,以便安装两个版本。允许并排安装的WiX项目

我正在使用WiX创建msi,并想知道如何在Wix中完成这项工作?例如

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

问候, 马亭

回答

9

你应该能够只是改变了顶级的产品代码和的UpgradeCode的GUID,使您的两款产品完全无关,并使用的ProductVersion识别版本脱身。您可以在产品之间共享组件GUID(这就是合并模块的工作方式),因此您的安装程序(组件定义)的内容不需要调整,仍然可以共享。

您面临的主要挑战是确保两个分离的产品不会相互干扰,例如具有相同的默认安装文件夹,开始菜单条目和相同的添加/删除程序条目。您可以通过在产品名称属性中包含产品版本号来实现此目的,在安装用户界面中可能看起来有点棘手,但这并不是前所未闻的。

+0

感谢您的回答!我会随时了解我的进展情况。 – Gluip 2011-05-04 06:54:19

+1

我basiccaly做了你所说的:改变升级代码。除此之外,我还必须更改程序菜单的guid(在开始菜单中)以在卸载时删除该文件夹(如果我已安装两个版本) – Gluip 2011-05-05 07:20:45

+0

如果安装了版本2并且之后想要安装旧版本。版本1再次? – Gilad 2014-02-09 17:13:45

0

关于你的第一个问题:不,你不需要。
但是为什么?

我很难理解我的并排场景中的Windows安装程序规则。 您确实需要了解component rules (including when you need to brake them)key paths的概念。 WiX不会将这些方面抽象出来。

This answer确实已经突出了可能的干扰。 我们来看几个例子。

  • 组件的GUID不需要改变。这打破了组件规则,但它起作用,因为产品的两个版本都以相互干扰的方式定义了相同的组件。
  • 不直接支持两个版本共享的资源。一个突出的例子是使用ProgID的文件扩展名,如here所示。

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

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