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

Far*_*eed 3 windows-installer wix 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>
Run Code Online (Sandbox Code Playgroud)

问题:有没有方法可以将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需要卸载.

Chr*_*ter 10

查看帮助主题MajorUpgrade元素:

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

设置为no(默认值)时,MSI允许安装具有相同版本和升级代码(但产品代码不同)的产品,并将其视为两个产品.设置为yes时,WiX会设置msidbUpgradeAttributesVersionMaxInclusive属性,该属性告诉MSI将产品视为与主要升级版本相同的版本.

当两个产品版本仅在第四个版本字段中有所不同时,这非常有用.MSI在比较产品版本时特别忽略该字段,因此仅在第四个版本字段中不同的两个产品是相同的产品,并且需要将此属性设置为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从未设计过的所需行为.


小智 5

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

ProductVersion属性