我安装了两个产品。它们具有相同的版本号和升级代码,但产品代码不同。我想对其中一种产品进行重大升级,但我创建的升级 exe 最终删除了这两种产品,并安装了新产品。
话虽如此,当一个产品与我要升级的另一种产品具有相同的升级代码时,我如何保持安装该产品?
我安装了两个产品。它们具有相同的版本号和升级代码,但产品代码不同。我想对其中一种产品进行重大升级,但我创建的升级 exe 最终删除了这两种产品,并安装了新产品。
话虽如此,当一个产品与我要升级的另一种产品具有相同的升级代码时,我如何保持安装该产品?
升级表首先驱动 FindRelatedProducts。FindRelatedProducts 使用这些信息来执行 MSI 产品搜索。如果将找到的 ProductCode 放在 ActionProperty 列指定的属性中
稍后,RemoveExistingProducts 将卸载在任何 ActionProperty 属性中找到的任何 ProductCodes(前提是未设置 msidbUpgradeAttributesOnlyDetect)。
因此,摆脱这种棘手情况的诀窍是编写一个升级行,这将导致 FindRelatedProducts 找不到任何一个产品。然后使用自定义操作进行您自己的搜索并根据需要设置属性(一个但不是另一个)。现在 RemoveExistingProducts 将能够执行主要升级。
附带说明:这是一种解决方法,而不是最佳实践。仔细考虑您对 UpgradeCodes、ProductCodes 和 ProductVersion 属性的选择,以避免将来出现这种情况。