【问题标题】:Can we upgrade 1.0.0.0 to 1.0.0.1 while changing product code?我们可以在更改产品代码的同时将 1.0.0.0 升级到 1.0.0.1 吗?
【发布时间】:2013-05-14 14:20:50
【问题描述】:

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

但如果我们执行 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 需要卸载。

【问题讨论】:

  • 为什么需要使用 Windows Installer 不完全支持的版本格式? ProductVersion 属性:“字符串的格式如下:major.minor.build”
  • IMO 这种格式太武断了。

标签: wix windows-installer upgrade wix3.7


【解决方案1】:

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

ProductVersion property

【讨论】:

  • 就 Windows Installer 的设计运行方式而言 100% 正确。如果你能阻止那些被接受的权力。但这是一个愚蠢的约束,可以简单安全地扩展。
【解决方案2】:

查看帮助主题MajorUpgrade Element

AllowSameVersionUpgrades 属性如下:

当设置为 no(默认值)时,安装具有相同 版本和升级代码(但不同的产品代码)是允许的,并且 微星将其视为两种产品。当设置为 yes 时,WiX 设置 msidbUpgradeAttributesVersionMaxInclusive 属性,它告诉 MSI 将具有相同版本的产品视为重大升级。

当两个产品版本仅在第四个不同时,这很有用 版本字段。 MSI 在比较时特别忽略了该字段 产品版本,因此只有第四个不同的两个产品 version 字段是相同的产品,需要将此属性设置为 yes 被检测到。

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

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

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

【讨论】:

  • 感谢 Christopher 提供如此详细和经过研究的回复。这似乎是一个很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2017-01-17
  • 2017-12-14
  • 2015-03-10
  • 1970-01-01
相关资源
最近更新 更多