【问题标题】:WiX Bundle: Patches for 1.0.0 are not removed from Programs & Features when bundle 2.0.0 is installedWiX Bundle:安装 bundle 2.0.0 时,不会从程序和功能中删除 1.0.0 的补丁
【发布时间】:2016-12-14 21:50:23
【问题描述】:

有 3 个捆绑包,代码如下所示。 1.0.0、1.0.0.1 和 2.0.0。

如果安装了 1.0.0、1.0.0.1 和 2.0.0,View Installed Updates 仍会将 1.0.0.1 列为已安装。在卸载最后一个版本之前,它将一直保留在那里。

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle Name="Burn Installer" Version="1.0.0" Manufacturer="LANSA" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" Copyright="..." AboutUrl="...">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Chain>
      <MsiPackage Id="MainPackage" SourceFile="TESTLIST_v1.0.0_en-us.msi" Vital="yes" DisplayInternalUI="yes" />
    </Chain>
  </Bundle>
</Wix>

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle Name="Patch 1.0.0.1" ParentName="Burn Installer" Version="1.0.0.1" Manufacturer="LANSA" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" Copyright="..." AboutUrl="...">
    <RelatedBundle Id="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" Action="Patch"/>     
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Chain>
      <MspPackage Id="Patch" SourceFile="TESTLIST_v1.0.0.1_en-us.msp" Vital="yes" DisplayInternalUI="no" PerMachine="yes" Permanent="no"/>
    </Chain>
  </Bundle>
</Wix>


<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle Name="Burn Installer" Version="2.0.0" Manufacturer="LANSA" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" Copyright="..." AboutUrl="...">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Chain>
      <MsiPackage Id="MainPackage" SourceFile="TESTLIST_v2.0.0_en-us.msi" Vital="yes" DisplayInternalUI="yes" />
    </Chain>
  </Bundle>
</Wix>

应用升级时,应从程序和功能和/或查看已安装的更新中删除所有以前的版本和补丁。与直接安装 MSI/MSP 而不是通过 Bundler 安装时发生的情况完全相同。

【问题讨论】:

    标签: wix patch burn wix3.9 major-upgrade


    【解决方案1】:

    WiX 3.9 及更高版本的答案如下...

    在主要升级包中,UpgradeCode 必须匹配。以下示例中的“AAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAAA”。

    在补丁包中,升级代码必须是唯一的,与任何包中使用的任何其他 GUID 无关。以“CCCCCCCC-CCCC-CCCC-CCCC-CCCCCCCCCCCC”为例。

    在主要升级包中,RelatedBundle 必须是唯一的。此 GUID 用于该主要升级的所有修补程序。示例中为“BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB”。

    这些设置还确保主要升级列在程序和功能中,补丁列在查看已安装的更新中。

    <Bundle Version="1.0.0" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA">
        <RelatedBundle Id="BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB" Action="Detect" />
    </Bundle>
    <Bundle Version="1.0.0.1" UpgradeCode="CCCCCCCC-CCCC-CCCC-CCCC-CCCCCCCCCCCC">
        <RelatedBundle Id="BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB" Action="Patch" />
    </Bundle>
    <Bundle Version="2.0.0" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA">
        <RelatedBundle Id="DDDDDDDD-DDDD-DDDD-DDDD-DDDDDDDDDDDD" Action="Detect" />
    </Bundle>
    

    【讨论】:

    • 这对我有用,除了删除补丁不会将 MSI 包降级到原始版本。你也让它工作吗?
    • @ChristopherPainter 是的,它对我有用。我们已经停止使用 WiX,因为 WiX 的作者表示这不是它的本意。由于还有许多其他无法解决的问题,而且他对此非常激烈,我们以不同的方式解决了我们的需求。
    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2016-08-11
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多