Wix 主要升级,我做错了什么?

标签 wix installation upgrade wix3

如果没有更改任何组件,升级工作正常,但每当组件发生更改时,升级都会失败,并且需要用户手动卸载并重新安装。

一些片段:

<Product Id="*" Name="My Application" Language="1033" Version="!(bind.FileVersion.ClientEXE)" Manufacturer="My Company" UpgradeCode="MYGUID-b94a-44eb-8e92-9286f1d89bbd">
    <Package Id="*" Description="My Installer" Comments="Copyright My Company 2008" InstallerVersion="200" Compressed="yes" />
    <Upgrade Id="MYGUID-b94a-44eb-8e92-9286f1d89bbd">
      <UpgradeVersion Language="1033" Property="UPGRADEFOUND" Minimum="0.0.0.0" Maximum="99.99.99.99" IncludeMinimum="yes" IncludeMaximum="yes" />
    </Upgrade>


    <InstallExecuteSequence>
          <RemoveExistingProducts Before="InstallInitialize" />
    </InstallExecuteSequence>

此外,以下注册表项存在一些问题,有时在卸载时不会删除,我不明白为什么:

      <Component Id="InstalledRegistry" Guid="SOMEGUID-0a17-4c6b-983d-8f3feb3a7724">
        <RegistryKey Id="InstalledRegKey" Root="HKMU" Key="SOFTWARE\MyCompany\Client" Action="createAndRemoveOnUninstall">
          <RegistryValue Name="Version" Type="string" Value="!(bind.FileVersion.ClientEXE)" KeyPath="yes"/>
        </RegistryKey>
      </Component>

这就是 Bootstrap 检查是否使用“REINSTALL=ALL REINSTALLMODE=vamus”启动 msiexec 的内容,因此,如果卸载了它但注册表项未删除,安装程序将尝试进行升级并静默失败.

如果需要更多信息,请告诉我


编辑:之后出现了一些其他问题,仅更新了一些文件。将RemoveExistingProducts更改为After =“InstallValidate”并解决了这个问题。使它有点慢,因为它完全删除了以前的安装,而不是仅仅升级已更改的文件(它似乎没有正确检测到我),但它完成了工作。

最佳答案

FWIW,您不需要任何命令行参数来执行主要升级。

代码对我来说看起来没问题,那么版本号可能没有改变吗? (请记住,如果您使用由 4 部分组成的版本号,Windows Installer 只关心前三个部分)

关于Wix 主要升级,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/603381/

相关文章:

android - Android 应用程序包安装在手机上的什么位置

Java从1.4升级到6

windows - 如何让windows安装更快

deployment - 为什么UAC对话框需要很长时间才能显示?

checkbox - wix bootstrapper 应用程序 - 在复选框上安装多个包

windows - 开始使用 openMP。安装在 window 上

installation - 如何从 .msi 设置中删除 .net 框架启动条件?

ios - 如何检测已安装或升级的 iOS App?

java - hibernate 升级 : StatisticsService()

wix - 使用 WiX RegistrySearch 检索通用文档路径失败