2

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

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

4

1 回答 1

1

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

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

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

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

于 2013-02-18T17:44:23.187 回答