Wix“高级”安装不会卸载以前的版本

Posted

技术标签:

【中文标题】Wix“高级”安装不会卸载以前的版本【英文标题】:Wix 'Advanced' Installation does not uninstall previous version 【发布时间】:2012-03-30 11:26:01 【问题描述】:

如果我遗漏了任何重要的细节,我想提前道歉。

我正在尝试执行升级,在安装新版本之前应删除旧版本的软件(和所有组件)。

我会尽量避免让您对细节感到厌烦,并说如果您进行“典型”安装,一切都会按计划进行。如果您选择进行高级安装(指定所有用户的安装、安装位置等),那么它似乎完全跳过了“卸载以前的版本”步骤。

到目前为止,我已经完成了以下工作:

-编辑了我的 UpgradeVersion 标签以匹配另一个 *** 问题的建议

-验证“OLDVERSIONBEINGUPGRADED”属性设置正确

-验证升级代码/ID 是否相同,版本号是否连续(从 1.0.8 升级到 1.0.10)——毕竟,“典型”安装工作正常!

-遵循此处给出的建议:WiX-- always overwrite the previous version 并遵循此建议:http://wix.sourceforge.net/manual-wix3/major_upgrade.htm

-试图通过手动调用 msiexec 来通过其产品 ID 卸载以前的版本来实施 hack(这失败了,因为我们已经在安装一些东西 - 有没有更好的方法来安排这个?)

我的产品/升级部分如下所示:

<Product Id="GUID1" UpgradeCode="GUID2" Version="1.0.10.0">
    <Package Compressed="yes" InstallerVersion="200"/>
    <MajorUpgrade Schedule="afterInstallInitialize" 
      DowngradeErrorMessage="Another version of [ProductName] is already installed."/>
    <Upgrade Id="GUID2">
        <UpgradeVersion Minimum="1.0.10" OnlyDetect="yes"
             Property="NEWERVERSIONDETECTED" />
        <UpgradeVersion Maximum="1.0.10" IncludeMaximum="no" 
             Property="PREVIOUSVERSIONINSTALLED" />
    </Upgrade>

我是 Wix 新手,所以我在描述我的问题时可能忽略了重要的细节。如果我忽略了重要的内容,请告诉我。

提前感谢您提供的任何意见。

【问题讨论】:

【参考方案1】:

听起来您遇到了和我一样的限制,请参阅this question。您不能在升级中更改安装范围(“每用户”或“每机器”)。

在 Windows Installer 中没有简单的解决方法。只能制作一个单独的bootstrapper exe,卸载之前的版本,然后开始安装新版本。

【讨论】:

感谢您的意见!在测试中,我们发现如果您每次都执行相同的“每台机器”安装,我们会遇到同样的问题。这仍然是相同的限制吗?选择“每台机器”会阻止升级还是范围更改?您最终是否使用(或测试)了该页面上建议的 hack? 仅供参考 - 我们的解决方法是禁止高级安装;它总是按用户安装。如果我们有在其他情况下有用的特性或功能,我们将来可能不得不对此进行调整。 @user1267756:就我而言,这是范围变化。如果即使范围没有改变,您仍然看到问题,那么这可能是一个不同的问题。不,我从来没有测试过那个黑客。

以上是关于Wix“高级”安装不会卸载以前的版本的主要内容,如果未能解决你的问题,请参考以下文章

Wix 安装程序不会覆盖以前版本的可执行文件

有条件地卸载 Wix 中的先前版本

如何实现 WiX 安装程序升级?

如何在安装 WiX Bundle 时避免卸载以前安装的 ExePackage(可再发行文件)?

卸载升级时如何摆脱wix中未使用的dll

WIX:安装应用程序的多个实例并升级应用程序(如果安装在以前安装的位置)