WIX:如果我启用升级并卸载新版本并尝试安装旧版本,则无法安装应用程序

WIX: Unable to install app if i enable upgrade and uninstall a new build and try to install old one

我正在使用 WIX 创建 msi 文件。我正在使用主要升级。升级工作正常,但如果卸载新版本,例如 Build 9 并安装旧版本(示例 3),尽管我的机器上当前未安装任何内容,但我收到错误 此版本比安装版本旧。安装将退出。 这是我的 WIX 配置。

<Product Id="*" Name="My App" Language="1033" Version="1.0.12"
           Manufacturer="MyApp" UpgradeCode="CDDBYUYB-7C1D-4B80-BA00-244ETERETE09A">
    <Package
      InstallerVersion="200" 
      Compressed="yes"
      InstallScope="perMachine"
      InstallPrivileges="elevated"/>
    <Media Id="1" Cabinet="MyApp.cab" EmbedCab="yes"/> 
    <MajorUpgrade
      AllowDowngrades="no" 
      DowngradeErrorMessage="!(loc.DowngradeError)" 
      AllowSameVersionUpgrades="no"
      IgnoreRemoveFailure="no"
      Schedule="afterInstallValidate" />

您应该验证升级是否正常工作。例如,如果您按每台机器安装,那么每个用户 "upgrade" 将不会有真正的升级,因为这两种产品仍会安装。如果您卸载了新的每用户安装程序,它将保留每台机器安装的安装程序,然后您将无法降级它。在反之亦然的情况下,交叉上下文 "upgrades" 也有类似的情况。所以这些都是猜测,不知道整个情况,所需的信息主要是初始安装的详细日志和你说的升级正在运行。

"Nothing on the machine" 可能只是使用了 ARPSYSTEMCOMPONENT=1。或者,如果您使用不同的凭据登录,您将看不到安装在另一个帐户下的产品。因为相同的 PackageCode 可能会导致这些类型的问题,所以如果您的 Package 元素中有一个自动生成的 ID“*”会更好。

获取升级的详细日志并确保它找到旧产品。

这可能是 MSI 错误,但不太可能。我唯一一次看到这个问题是在灾难性的机器崩溃期间,即使产品本身没有标记为已安装,系统也会留下部分 UpgradeCode 信息。这是特定于单个机器的,因此您可以通过在干净的机器上重复该场景来验证这是否是问题所在(虚拟机是解决此问题的理想选择)。

最简单的方法是使用新的 UpgradeCode 重新开始,确保每次构建、更改 ProductCode 以及每次重大升级时始终生成新的 PackageCode。