两个不同的产品具有不同的UpgradeCodes,并且存在于两个不同的设置(ProductA.msi和ProductB.msi)中。两者都有版本N。
现在将ProductB 合并到ProductA版本N + 1。也就是说,ProductB的文件将由ProductA的安装程序提供,并提供给ProductA的安装位置。
安装ProductA版本N + 1的用户不希望再安装ProductB(甚至可能导致问题)。因此,在安装ProductA或将其升级到版本N + 1时,应删除ProductB(任何版本)。如何在ProductA的设置中完成此操作?
这类似于此问题,但这是为了在卸载而不是在安装/升级时删除其他产品。 Wix - uninstall different product
答案 0 :(得分:1)
将ProductB的升级代码添加到ProductA中新的Upgrade
element。然后,在安装ProductA N + 1时,升级将同时删除ProductA N和ProductB。
答案 1 :(得分:1)
WiX示例 :这是Bob Arnson描述的技术示例: Adding entries to MSI UpgradeTable to remove related products 。确保在设置中保留此条目以用于将来的版本。它需要保留在那里,因为人们在升级时可以跳过几个版本?
在线示例 :请参见上面的链接以获取完整示例。
<!-- Older Product Line 1: Upgrade Code -->
<Upgrade Id="{11111111-1111-1111-1111-000000000000}">
<UpgradeVersion Property="PRODUCTLINE1" IncludeMinimum="yes" Minimum="0.0.0" />
</Upgrade>
调试主要升级 :WIX does not uninstall older version-重大升级失败原因的临时列表。
组件引用 :合并设置可能会导致某些组件引用错误。我想你知道。这可能表现为安装后丢失文件或升级方案中的“某些故障”。错误的注册,滞留的文件,您要命名-只是提及。
组件GUID :以下是有关组件引用和组件GUID的一些背景信息:Change my component GUID in wix?
经验法则 :如果使用新组件GUID将旧文件安装到新位置,则应该没问题。要检查的事情:共享文件,COM服务器,任何在机器范围内注册,服务,COM Interop,COM +等不正常的事情……许多设置都很简单,others are not。
自定义操作 :迁移任何自定义操作都可能导致严重的问题-尤其是在升级方案中,如果序列具有复杂的排序和条件,则无法确定这些操作实际在何时运行。