当两个产品具有相同的升级代码时升级一个产品而不是另一个

Posted

技术标签:

【中文标题】当两个产品具有相同的升级代码时升级一个产品而不是另一个【英文标题】:Upgrading one product but not the other when both products have the same upgrade code 【发布时间】:2013-02-03 03:30:53 【问题描述】:

我安装了两个产品。它们具有相同的版本号和升级代码,但产品代码不同。我想对其中一种产品进行重大升级,但我创建的升级 exe 最终删除了这两种产品,并安装了新产品。

话虽如此,当一个产品与我要升级的另一产品具有相同的升级代码时,我如何保持安装该产品?

【问题讨论】:

@Christopher Painter:希望您能帮助我解决这个问题...谢谢。 两种产品的ProductLanguage property 是否也相同?如果 ProductLanguage 也相同,Upgrade Table 不支持此方案。您可以在 MSDN 文档中查看 Using an UpgradeCode,了解支持的方案。 完成。顺便说一句,这是一个真正的问题。你也不是第一个问它的人。 不幸的是,两种产品的 ProductLanguage 属性是相同的。 【参考方案1】:

升级表首先驱动 FindRelatedProducts。 FindRelatedProducts 使用这些信息来执行 MSI 产品搜索。如果将找到的 ProductCode 放在 ActionProperty 列指定的属性中

稍后,RemoveExistingProducts 会卸载在任何 ActionProperty 属性中找到的任何 ProductCodes(前提是未设置 msidbUpgradeAttributesOnlyDetect)。

因此,摆脱这种棘手情况的诀窍是创建一个升级行,这将导致 FindRelatedProducts 找不到任何产品。然后使用自定义操作进行您自己的搜索并根据需要设置属性(一个但不是另一个)。现在 RemoveExistingProducts 将能够执行主要升级。

附带说明:这是一种变通方法,而不是最佳实践。仔细考虑您对 UpgradeCodes、ProductCodes 和 ProductVersion 属性的选择,以避免将来出现这种情况。

【讨论】:

感谢您的解决方法。我知道这并不是真正的最佳做法,但看起来我别无选择。再次感谢您的帮助。我很感激。

以上是关于当两个产品具有相同的升级代码时升级一个产品而不是另一个的主要内容,如果未能解决你的问题,请参考以下文章

OBIEE 创建自定义联接以提取两个相同但具有不同数据的列

如何根据升级代码检测是不是安装了应用程序

订阅升级到 inapp 产品

针对已有产品或项目升级代码统计方案

针对已有产品或项目升级代码统计方案

天下大事必作于细,聊聊腾讯兼容测试的升级“打怪”历程