我们可以在更改产品代码时将1.0.0.0升级到1.0.0.1吗?

时间:2013-05-20 04:17:00

标签: wix windows-installer upgrade wix3.7

我被要求将ver 1.0.0.0升级到1.0.0.1。默认情况下,当我使用虚拟安装程序进行测试时,如果我们更改产品代码,则1.0.0.0和1.0.0.1将并排安装。

但是如果我们执行ver 1.0.1.0(在更改产品代码时),它会进行升级。这是我的升级部分:

   <Upgrade Id="{354E9DAE-EB70-4BCC-BD93-AC20ACE3F370}">
     <UpgradeVersion
      Maximum="$(var.ver)"
      Property="DOMAJORUPGRADE"
      MigrateFeatures="yes"
      IncludeMinimum="yes"/>
   </Upgrade>

问题:有没有方法可以将1.0.0.0升级到1.0.0.1?

实际上,我给出了这样的场景:

  1. 在1.0.0.0之上安装1.0.0.1时,需要升级1.0.0.0。
  2. 在1.0.0.1之上安装1.0.0.0时,1.0.0.0需要失败。
  3. 在1.0.0.1之上使用不同的产品代码安装1.0.0.1(仅在开发版本中可能),现有的1.0.0.1需要卸载。

2 个答案:

答案 0 :(得分:10)

查看帮助主题MajorUpgrade Element

以下是关于AllowSameVersionUpgrades属性的说法:

  

设置为no(默认值)时,安装具有相同的产品   版本和升级代码(但不同的产品代码)是允许的   被MSI视为两种产品。设置为yes时,WiX设置为   msidbUpgradeAttributesVersionMaxInclusive属性,告诉MSI   处理与主要升级版本相同的产品。

     

当两个产品版本仅在第四个版本中有所不同时,这非常有用   版本字段。 MSI在比较时特别忽略了该字段   产品版本,所以两个产品只在第四个不同   version字段是相同的产品,需要将此属性设置为yes   被发现。

     

请注意,因为MSI忽略了第四个产品版本字段,   将此属性设置为yes也允许在第一个时降级   三个产品版本字段完全相同。例如,产品   版本1.0.0.1将“升级”1.0.0.2998因为它们被视为   相同版本(1.0.0)。这可能会重新引入严重的错误   最安全的选择是更改前三个版本字段并省略   此属性将获取默认值no。

     

当AllowDowngrades也是“是”时,此属性不能为“是” -   AllowDowngrades已经允许两个版本相同的产品   号码互相升级。

蒂姆的回答是正确的95%。我真的不建议只改变第4版。也就是说,有一种方法可以缓解上面提到的“意外降级”错误。编写一个不检测相同版本的MajorUpgrade规则。然后编写一个自定义操作,对第四个字段中较大的产品进行额外检查并共享您的UpgradeCode。将检测到的ProductCode设置或附加到ActionProperty。在FindRelatedProducts和RemoveExistingProducts之间安排此自定义操作,您将获得从未为Windows Installer设计的所需行为。

答案 1 :(得分:5)

不,因为MSI忽略了版本号的修订部分。 MSI看到版本1.0.0.0和1.0.0.1完全相同,因为它只查看版本的主要版本,次要版本和构建版本,即1.0.0版本,两者都是相同的。

ProductVersion property