在使用wix安装程序安装任何版本之前强制卸载

Thi*_*rry 11 windows-installer wix wix3.7

有人知道吗:

  1. 在安装新版本的安装程序之前,如何强制wix安装程序卸载以前安装的任何先前副本,无论是次要版本还是主要版本.

  2. 如果1)在运行新的次要/主要设置时无法完成,我是否至少可以显示一条消息,说明检测到以前的版本并且应首先卸载并取消设置?

谢谢.

更新:

我已将以下内容添加到我的settings.wxi中

<Upgrade Id="$(var.UpgradeCode)">

    <!-- Populate NEWERPRODUCTFOUND if there is an installed 
         package with the same upgrade code
         and version is > the version being installed -->
    <UpgradeVersion
         Minimum="$(var.CurrentVersion)"
         IncludeMinimum="no"
         OnlyDetect="yes"
         Language="1033"
         Property="NEWERPRODUCTFOUND" />

    <!-- Populate UPGRADEFOUND if there is an installed 
         package with the same upgrade code
         and the version is between the earliest version defined
         and the version being installed -->
    <UpgradeVersion
         Minimum="$(var.FirstVersion)"
         IncludeMinimum="yes"
         Maximum="$(var.CurrentVersion)"
         IncludeMaximum="no"
         Language="1033"
         Property="PREVIOUSVERSIONSINSTALLED" />
</Upgrade>
Run Code Online (Sandbox Code Playgroud)

我在MyProduct.wxs中定义了以下内容

<?define CurrentVersion="5.0.0.18"?>
<?define FirstVersion="1.0.0.0"?>
<?define UpgradeCode="c1b1bfa0-9937-49eb-812c-5bac06eff858"?>
Run Code Online (Sandbox Code Playgroud)

最后,我已将此添加到我的 <InstallExecuteSequence>

<RemoveExistingProducts Before="InstallInitialize" />
Run Code Online (Sandbox Code Playgroud)

但是当我将我的版本增加到5.0.0.19时,它仍然没有删除旧版本.

也许我正在以错误的方式看待这个,但在我的"添加/删除程序"窗口中,我看到我的设置列为5.0.0.18,我看到第二个条目为5.0.0.19

我每次更改版本时都应该更改升级代码吗?我以为我读过这个永远不应该改变.

有任何想法吗?

谢谢.

Thi*_*rry 17

经过大量的谷歌搜索后,我想出了答案!Windows Installer没有考虑我使用的版本的4号,即5.0.0.18.

它只查看产生版本号的前3组数字.一旦我将我的版本更改为5.0.18.0到5.0.19.0,它立即使用问题中发布的代码,它删除了以前的版本并在其上安装了新版本.

请注意,我实际上删除了上面的代码并最终使用了MajorUpgrade,因为它就是我所需要的:

<MajorUpgrade
  AllowDowngrades="no"
  AllowSameVersionUpgrades="no"
  IgnoreRemoveFailure="no"
  DowngradeErrorMessage="loc.NewerVersionInstalled"
  Schedule="afterInstallInitialize"/>
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他人!


ken*_*ken 7

这是元素AllowSameVersionUpgrades属性的文档MajorUpgrade。它包含相关信息。重点是我的。

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

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

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

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

但是,将此属性设置yes为可能不是您想要的,因为根据第三段,版本 5.0.0.18 将被视为对版本 5.0.0.19 的升级。将此属性设置为no并使用第三个产品版本字段以仅允许升级。