为何相同UpgradeCode的MSI安装时未替换旧版本而是并行安装?
问题描述
我使用WixSharp构建MSI安装包已有多年,一直遵循以下规则:
应用程序的每个新版本,需修改ProductCode但绝不修改UpgradeCode。
此前该规则一直运行正常,但最近我发现安装应用程序的新版本时,并未替换旧版本,而是进行了并行安装。运行PowerShell脚本后,在测试机上得到对应结果。
核心问题
为何拥有相同UpgradeCode的MSI文件在安装时不会替换已存在的旧版本?
(我也已在WixSharp的GitHub仓库中发布了此问题)
解决方案
我最终解决了该问题,主要做了以下操作:
- 移除安装包名称中的版本字符串(因为MSI似乎还会比较名称来判断是否可升级,仅相同名称符合要求)
- 按照建议,将版本号从4位改为3位,例如从"1.0.0"升级到"1.0.1"等。
- 在WixSharp的
ManagedProject实例中添加以下代码:
InstallScope = InstallScope.perMachine, MajorUpgradeStrategy = new MajorUpgradeStrategy { UpgradeVersions = VersionRange.OlderThanThis, PreventDowngradingVersions = VersionRange.NewerThanThis, NewerProductInstalledErrorMessage = "Newer version already installed.", RemoveExistingProductAfter = Step.InstallInitialize },
完成这些更改后,升级成功。
内容的提问来源于stack exchange,提问作者Uwe Keim
相关产品推荐
相关产品推荐

