wix - 使用 Wix Toolset 可以通过 MajorUpgrade 设置最低版本

标签 wix

我们一直在wix 3.11.1.2318中使用MajorUpgrade元素,但我们的安装程序无法正确升级。它不会删除文件,而是在添加/删除程序中留下额外的条目。在构建过程中,我们将 Version="0.0.0.0"切换为当前版本。

下面是一个简化的示例来展示我们的用法:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" >


  <Product Id="*" Name="My Product" Language="1033" Version="0.0.0.0" Manufacturer="MyCompany"
         UpgradeCode="{B55B9CB0-BA28-4BB3-834B-6075AD5D45E4}">

    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <UIRef Id="WixUI_ErrorProgressText" />


    <!-- Specify UI -->
    <Property Id="WIXUI_INSTALLDIR" Value="INSTALL_FOLDER" />
    <Property Id="RestoreFiles" Value="INSTALL_FOLDER" />


    <MajorUpgrade  AllowDowngrades="no" AllowSameVersionUpgrades="yes" DowngradeErrorMessage="!(loc.NewerVersionInstalled)" />

</Wix>

我查看了 msi 中的升级表,其中一个条目将 MinVersion 设置为我们构建的版本,并且没有最大版本。 另一个条目将 MaxVersion 设置为我们刚刚构建的版本,并且没有最小版本。

我认为将 MinVersion 设置为当前版本后我们将无法删除这些文件,所以我查看了 在 Upgrade 元素中并替换了 MajorUpgrade 元素。

<!--
<MajorUpgrade  AllowDowngrades="no" AllowSameVersionUpgrades="yes" DowngradeErrorMessage="!(loc.NewerVersionInstalled)" />
-->

<Upgrade Id="{B55B9CB0-BA28-4BB3-834B-6075AD5D45E4}">
  <UpgradeVersion Minimum="1.0.0"
                  IncludeMinimum="yes"
                  OnlyDetect="no"
                  Maximum="0.0.0.0"
                  IncludeMaximum="no"
                  Property="OLDVERSIONFOUND" />
</Upgrade>    

<InstallExecuteSequence>

  <RemoveExistingProducts After="InstallInitialize" />    

</InstallExecuteSequence>

这确实删除了旧文件,但留下了第二个添加/删除程序条目。

MajorUpgrade 有办法设置最低版本吗? 如果没有方法设置最低版本,我应该继续升级吗? 什么可能导致第二个条目?

最佳答案

日志记录:请确保创建 a proper verbose log file以获得更好的线索来了解正在发生的事情。


主要升级:之前的一些答案:

您描述的升级设置对于 WiX 来说听起来很正常。我假设您的构建过程成功替换了占位符 0.0.0.0(我认为您搜索并替换了它)。您还可以使用 WiX 变量并传入值,但这是另一个故事了。


悬挂版本?:您确定在“添加/删除”中没有未删除的悬挂版本,因为它是测试版本或类似版本那? Try generating a list of installed packages 。上一个链接是一个创建小型 HTML 报告的脚本,您可以 try this simpler script以 *.csv 格式创建输出(您可以将其导入 Excel 并按名称列排序以轻松查找重复项)。尝试安装在干净的虚拟机上以确保。只需要验证情况并非如此 - 可能未经验证的事情之一就是原因。


升级表:下面是升级表示例。请注意,第一个条目是真正的重大升级。它将检测所有低于指定最高版本的版本。如果您的版本已经安装,则无需升级。因此,我们不需要 max 高于我们安装的当前版本。事实上,如果您尝试安装的版本应该进入“维护模式” - 它显示您已安装的功能列表以及尚未安装的任何功能。

第二行是为了防止使用比您正在运行的安装程序更低的版本覆盖更高的现有安装版本。

Upgrade table

关于wix - 使用 Wix Toolset 可以通过 MajorUpgrade 设置最低版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66128501/

相关文章:

wix - 如何使用 WiX 创建 .msi 安装程序

wix - 如何使 ExePackage 的 Wix DetectCondition 始终为 True?

wix - 在 WIX 中执行自定义操作时未安装文件

c# - Wix - 在哪里安装 Windows 功能

azure-devops - 如何在 Azure Devops 中使用 WIX 创建 .msi 安装程序?

checkbox - WiX 刻录主题复选框 - 默认选中

.net - 使用 WiX 安装程序复制 Visual Studio COM 注册

wix - 使用 msiexec 卸载特定功能

c# - 注册表 GetSubKeyNames() 列出的键与 Regedit 不同?

wix - 如果文件版本发生变化,安排重新启动