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

时间:2014-10-13 09:04:41

标签: wix windows-installer wix3.7

有谁知道:

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

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

  3. 感谢。

    更新:

    我已将以下内容添加到我的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>
    

    我在MyProduct.wxs

    中定义了以下内容
    <?define CurrentVersion="5.0.0.18"?>
    <?define FirstVersion="1.0.0.0"?>
    <?define UpgradeCode="c1b1bfa0-9937-49eb-812c-5bac06eff858"?>
    

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

    <RemoveExistingProducts Before="InstallInitialize" />
    

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

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

    每次更改版本时,是否应该更改升级代码?我以为我读过这个永远不应该改变。

    有什么想法吗?

    感谢。

2 个答案:

答案 0 :(得分:16)

经过大量的谷歌搜索,我找到了答案! 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"/>

希望这有助于其他人!

答案 1 :(得分:4)

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

  

设置为no(默认值)时,安装具有相同的产品   版本和升级代码(但不同的产品代码)是允许的   被MSI视为两种产品。设置为yes时,WiX设置为   msidbUpgradeAttributesVersionMaxInclusive属性,告诉MSI   处理与主要升级版本相同的产品。

     

当两个产品版本仅在第四个版本中有所不同时,这非常有用   版本字段。 MSI在比较时特别忽略了该字段   产品版本,所以两个产品只在第四个不同   version字段是相同的产品,需要将此属性设置为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,并使用第三个产品版本字段仅允许升级。