WIX:升级时,有2个不同的UpgradeCode怎么办?

WIX: When upgrading, what to do when there are 2 different UpgradeCodes?

在这里得到一个很好的答案后:,现在我在这个领域面临着不同的问题。

我有 2 个版本,有 2 个不同的升级代码。发生这种情况是因为我们已经部署了一个版本的新 WIX w/out,将 UpgradeCode 与旧 MSI 同步。

将新的 Wix 安装程序与其中一个代码同步,升级顺利进行。我被第二个冲昏了头脑吗?我尝试只从 Add/Remove 中卸载额外的一个并且工作顺利,但在我指示这些用户转到 Add/Remove 之前,我想知道是否有另一种技巧可以同时处理这两个问题。

也许如果我能在安装过​​程中以某种方式检测到安装了哪个版本,我可以动态设置新的 Wix UpgradeCode 吗?

为了检测旧版本,我会考虑使用自定义操作。

将两个 UpgradeCodes 放入升级 table 成两行。这允许您让 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 操作期间删除它们。