在这里得到一个好的答案后:WIX: How can I uninstall a previous MSI built using a VS *.vdproj,现在我面临着一个不同的问题。
我有2个版本,有2个不同的UpgradeCodes。之所以发生这种情况,是因为我们已经部署了一个版本的新WIX w / out将UpgradeCode与旧的MSI同步。
将新的Wix安装程序与其中一个代码同步,升级顺利进行。我是否在第二个人身上?我试图从添加/删除中卸载额外的一个并且运行顺利,但在我指示这些用户进入添加/删除之前,我想知道是否还有另一个技巧来处理这两个。
也许如果我能在安装过程中以某种方式检测到安装了哪个版本,我可以动态设置新的Wix UpgradeCode吗?
答案 0 :(得分:2)
将UpgradeCodes升级表放入两个单独的行中。这允许您在升级期间让MSI自动卸载旧的MSI(如果这是您想要的),并且允许您有条件地使用MSI属性来检查系统上已安装的内容。
更新(回复第一条评论)
<!-- old product -->
<Upgrade Id="$(var.UpgradeCode1)">
<UpgradeVersion Property="OLD_PRODUCT_FOUND_1"
IncludeMaximum="yes"
Maximum="2.0.0"
MigrateFeatures="yes"
OnlyDetect="no" />
</Upgrade>
<!-- new product -->
<Upgrade Id="$(var.UpgradeCode2)">
<UpgradeVersion Property="OLD_PRODUCT_FOUND_2"
IncludeMaximum="yes"
Maximum="3.0.0"
MigrateFeatures="yes"
OnlyDetect="no" />
</Upgrade>
此代码将检测两个UpgradeCodes,如果找到其中一个(或两个),则会在RemoveExistingProducts操作期间删除它们。
答案 1 :(得分:-2)
要检测旧版本,我会考虑使用自定义操作。