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

Installation 当两个产品具有相同的升级代码时,升级一个产品而不是另一个产品,installation,windows-installer,installshield,uninstallation,Installation,Windows Installer,Installshield,Uninstallation,我安装了两个产品。它们的版本号和升级代码相同,但产品代码不同。我想对其中一个产品进行重大升级,但我创建的升级exe最终删除了这两个产品,并安装了新的产品 也就是说,当一个产品的升级代码和我要升级的另一个产品的升级代码相同时,我如何保持安装一个产品?升级表首先驱动FindRelatedProducts。FindRelatedProducts使用该信息执行MSI产品搜索。如果将的ProductCode放置在ActionProperty列指定的属性中 稍后,RemoveExistingProducts

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


也就是说,当一个产品的升级代码和我要升级的另一个产品的升级代码相同时,我如何保持安装一个产品?

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

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

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


作为旁注:这是一种变通方法,而不是最佳实践。仔细考虑您选择的升级代码、产品代码和产品版本属性,以避免将来出现这种情况。

@克里斯托弗画家:希望您能帮助我解决这个问题…谢谢。这两种产品也一样吗?如果ProductLanguage也相同,则此方案不受支持。您可以在MSDN文档中查看受支持方案的说明。完成。顺便说一句,这是一个真正的问题。您也不是第一个问这个问题的。不幸的是,ProductLanguage属性对于两种产品都是相同的。谢谢您的解决方法。我知道这不是最好的做法,但看起来我别无选择。再次感谢你的帮助。我很感激。