Wix重大升级,我做错了什么?

时间:2009-03-02 18:14:22

标签: wix installer 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>

这就是引导程序检查是否启动带有“REINSTALL = ALL REINSTALLMODE = vamus”的msiexec,因此如果它已卸载但注册表项未被删除,则会尝试进行升级并无提示失败

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


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

1 个答案:

答案 0 :(得分:3)

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

代码对我来说没问题,那么可能是版本号没有改变吗? (请记住,如果您使用的是4部分版本号,则Windows Installer仅关注前三个部分)