2

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

也就是说,当产品与另一个想要升级的产品具有相同的升级代码时,如何安装一个产品?

+0

@Christopher Painter:希望你能帮助我解决这个问题......谢谢。 – fairyberry 2013-02-18 16:27:01

+0

两种产品的[ProductLanguage属性](http://msdn.microsoft.com/En-US/Library/Windows/Desktop/5d798825-c70b-4d5a-b88c-a9db40663f6a)是否也相同?如果ProductLanguage也相同,则[升级表](http://msdn.microsoft.com/En-US/Library/Windows/Desktop/f5fda405-8a09-495e-aa8c-b808a2f02b0f)不支持此方案。您可以在MSDN文档中看到[使用UpgradeCode](http://msdn.microsoft.com/En-US/Library/Windows/Desktop/de62bb80-56a0-4652-9509-5d36ed171c69)以获取支持的方案的说明。 – 2013-02-18 17:00:26

+0

完成。顺便说一句,这是一个真正的问题。你不是第一个问这个问题的人。 – 2013-02-18 17:45:31

回答

1

升级表首先驱动FindRelatedProducts。 FindRelatedProducts使用这些信息执行MSI产品搜索。如果在ActionProperty列中指定的属性中放置ProductCode,则稍后,RemoveExistingProducts会执行卸载任何ActionProperty属性中的任何ProductCodes(前提是未设置msidbUpgradeAttributesOnlyDetect)。

因此,像这样的粘性情况的诀窍是创作一个升级行,将导致FindRelatedProducts找不到任何产品。然后使用自定义操作进行自己的搜索并根据需要设置属性(一个而不是其他)。现在RemoveExistingProducts将能够执行主要升级。

作为一个方面说明:这是一个工作,而不是一个最佳实践。仔细考虑您对UpgradeCodes,ProductCodes和ProductVersion属性的选择,以避免将来出现这种情况。

+0

感谢您的解决方法。我知道这不是最好的做法,但它看起来像我没有选择..再次感谢您的帮助。我很感激。 – fairyberry 2013-02-19 01:07:46

相关问题