WIX不会卸载旧版本

时间:2019-07-11 13:02:53

标签: wix windows-installer

经过一番谷歌搜索后,我想到了一个配置,该配置应允许我仅安装软件包的较新版本(确实如此),同时替换已安装的较旧版本(并非如此)

我的wxs文件如下:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*"
             Name="Gdml File Viewer" Language="1033"
             UpgradeCode="5fb07c15-32a5-4b8a-9794-e4425bfc2eea"
             ...>
        <Package InstallerVersion="200"
                 Compressed="yes"
                 InstallScope="perMachine" Platform="x64" />
        <MajorUpgrade Schedule="afterInstallValidate"
                      DowngradeErrorMessage="A later version of [ProductName] is already installed"
                 AllowSameVersionUpgrades="no"
                 AllowDowngrades="no" />
...

正如预期的那样,它确实允许我安装较新的版本,但未卸载较旧的版本。它仍然显示在“应用和功能”列表中:

Apps & features

(另一个实例的版本为2019.14.181.35181)

1 个答案:

答案 0 :(得分:2)

  

主要升级失败 :当您在“添加/删除程序”中看到两个条目时,主要升级失败(通常)。

     
      
  • Config :您需要修复Upgrade table的配置。默认升级表的最小WiX标记-具有正常参数(看起来不错,请参见下面的屏幕截图)-只是:

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    
  •   
  • 悬空版本 :您的WiX标记也可能很好,并且您有一个悬空的较早版本,但从未正确配置,如果这样卸载手动重试,或尝试使用干净的虚拟机。

  •   
  • 安装上下文 :MSI文件可以按用户或计算机安装。如果按用户安装,然后按计算机安装,它将不会检测到以前的版本。您的软件包中是否有对ALLUSERS的硬编码引用?

  •   
  • ProductVersion :产品版本中的前3个数字中可能没有一个或多个(第四个字段被忽略)。

  •   

其他详细信息 :还有一些需要记住的事情:

  • 主要升级本质上是对旧版本的卸载,以及对新版本的安装,其中包含用于执行操作的顺序的许多计划选项(先安装新版本,然后卸载旧版本,反之亦然)

  • 如上所述,您还可能在包装盒上安装了混乱的较旧版本,但配置不正确,或者发生了一些X-Files废话,导致升级失败。发生。

WiX学习曲线 :建议使用一些示例来帮助加快学习过程。唯一真正有用的东西吗? Here are some WiX Quick Start Suggestions。那里有示例链接。

最小WiX样本 :有一个旧样本:Transparent Aluminum。本质上是如何使用Votive创建基于WiX的安装程序的演练。它包括一个主要的升级元素。我相信这种简单的配置可以为您寻求的降级提供保护:

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

查看产生的Upgrade table

Orca

测试用例 :使用“透明铝”作为测试项目,您可以尝试执行以下步骤来使升级工作正常进行:

  1. 将产品代码设置为 * ,以便为每个版本(“ <Product Id="*" ..." )自动生成新的ProductCode。
  2. li>
  3. 编译您的MSI的第一个版本。在解决方案视图中的 Visual Studio 中右键单击WiX项目,然后选择 Open Folder in File Explorer 。进入 bin Debug Release
  4. 通过在文件名的末尾添加_1重命名已编译的MSI。例如:MySetup_1.msi
  5. 现在增加WiX来源中产品版本字段的前3位数字之一: <Product Id="*" ... Version="2.0.0"
  6. 编译新的MSI并将其重命名:MySetup_2.msi
  7. 安装从版本1开始的MSI文件,然后安装第二个版本。验证主要升级是否成功。

高级 :这是使用便捷元素 "MajorUpgrade" 的组合来配置主要升级的高级方法的演示和较旧的 "Upgrade" 元素(可让您更精细地控制生成的Upgrade表):

  

Adding entries to MSI UpgradeTable to remove related products

这里是仅使用较旧的Upgrade元素导致更多工作的示例,但可以完全控制Upgrade表:Major Upgrade - "The Old, Manual Way"


链接