我正在为我们的产品创建 MSI 。我希望该产品能够安装并排。这样我就可以先安装1.0.0,然后再安装1.0.1,这样就可以安装两个版本了。
我正在使用WiX创建msi,并想知道如何在Wix中完成这项工作?例如
问候, 马亭
答案 0 :(得分:10)
您应该能够通过更改顶级产品代码和UpgradeCode GUID来使您的两个产品完全不相关,并使用Productversion来识别版本。您可以在产品之间共享组件guid(这就是合并模块的工作方式),这样安装程序的内核(组件定义)就不需要调整,仍然可以共享。
您面临的主要挑战将是确保两个分离的产品不会相互干扰,例如具有相同的默认安装文件夹,开始菜单条目和相同的添加/删除程序条目。您可以通过在ProductName属性中包含产品版本号来实现此目的,这在您的安装UI中看起来有点技术性,但这并非闻所未闻。
答案 1 :(得分:0)
关于你的第一个问题:不,你不需要。
但为什么呢?
在我的并排场景中,我很难理解Windows安装程序规则。 您真的需要了解component rules (including when you need to brake them)和key paths的概念。 WiX并没有抽象出这些方面。
This answer已经突出了可能的干扰。 我们来看几个例子。
不直接支持两个版本共享的资源。一个突出的例子是使用ProgIDs使用文件扩展名,如here所示。
如果更改GUID(使用“*”GUID时也会发生),卸载任一版本时都会删除扩展程序。
如果您不更改GUID,将保留扩展名,但指向最近安装的版本。您可以选择此选项作为两个恶魔中的较小者,至少支持用户按照安装版本的相同顺序卸载版本的情况。
这里有一个陷阱:扩展需要成为组件的关键路径。这使得ProgID元素的使用在并排场景中会出现问题,因为如果没有将ProgID元素放在与引用文件相同的组件中,您将收到ICE69警告。此外,它是WiX的实现细节,它生成的注册表项将成为关键路径。