【问题标题】:WIX: Prevent only CERTAIN older versions from being updatedWIX:仅阻止更新某些旧版本
【发布时间】:2021-01-19 08:20:37
【问题描述】:

我们有一些使用 WIX 作为安装程序技术的产品。安装程序中的升级处理由 MajorUpgrade 元素处理

<Wix>
  <Product Id="..." Name="..." Language="..."
    Version="..." Manufacturer="..."
    UpgradeCode="...">
...

    <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" AllowSameVersionUpgrades="yes" />
  </Product>
</Wix>

如您所见,到目前为止,我们都支持从所有旧版本进行升级,但是我们必须对此进行一些更改,以便只能升级某个版本以上的版本,而旧版本会收到错误消息并升级失败.

根据我的研究,这应该可以使用 Upgrade 元素(如https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/checking-for-oldies/ 中所述)

我现在的问题:

  • 是否可以/建议混合使用 MajorUpgradeUpgrade 元素?
  • 有没有更好的方法来实现这一点?

更新

感谢您的回复和回答,我使用的解决方案如下:

<Wix>
  <Product Id="..." Name="..." Language="..."
    Version="..." Manufacturer="..."
    UpgradeCode="My_upgrade_code">
...

    <InstallExecuteSequence>
...
      <Custom Action='UpdateFromVersionNotSupported' After='FindRelatedProducts'>UNSUPPORTEDUPDATEVERSIONFOUND</Custom>
...
    </InstallExecuteSequence>
    <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" AllowSameVersionUpgrades="yes" />

    <Upgrade Id='My_upgrade_code'>
        <UpgradeVersion OnlyDetect='yes' Property='UNSUPPORTEDUPDATEVERSIONFOUND' Maximum='Oldes_version_where_update_is_allowed' IncludeMaximum='no' />
    </Upgrade>

    <CustomAction Id='UpdateFromVersionNotSupported' Error='Updates are only supported from version ?? or later' />

  </Product>
</Wix>

【问题讨论】:

  • 为什么要安装ExecuteSequence?我认为应该是InstallUISequence?

标签: wix


【解决方案1】:

应该有几种方法:

  1. 新的 UpgradeCode:更改升级代码会分离旧版本和新版本吗?您可以将两个升级代码添加到升级表并以不同方式处理它们。见下图和this answer

  2. 版本控制:您还可以使用版本匹配来仅升级某些 MSI 版本。 Upgrade Table documentation。换句话说,将最大和最小版本设置为每个升级表条目的目标。您可以继续添加行以不同方式处理不同的版本。像这样的东西(只是一个粗略的模型):

WiX 构造:您可以混合搭配现代 WiX 便利元素 使用较旧和更灵活的元素。 See this answer.

Side-By-Side MSI:请注意,如果您想在同一台计算机上 install the same MSI twice,除非您隔离实例(COM serversfile associationsservicesetc... - 任何东西machine-wide interference capable)。最糟糕的情况通常是通过注册表在系统范围内注册的东西(除非它支持多实例)。 More technical information here。虚拟化能帮上忙吗?详情请查看链接。

【讨论】:

    【解决方案2】:

    您需要使用升级元素。

    https://wixtoolset.org/documentation/manual/v3/xsd/wix/upgrade.html

    https://wixtoolset.org/documentation/manual/v3/xsd/wix/upgradeversion.html

    您需要编写 2 条规则。一种允许升级版本 X 或更高版本。这可以是您的标准 MajorUpgrade 元素。另一个检测版本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      相关资源
      最近更新 更多