有没有办法从WiX中的安装程序运行卸载程序?

时间:2015-04-15 09:43:31

标签: wix windows-installer

我有一套基于WiX的安装程序用于一套应用程序。它取代了一堆旧安装程序,其中套件中的每个应用程序都有自己的基于InstallShield的安装程序。

我希望WiX安装程序能够找到任何旧的基于InstallShield的安装并运行各自的卸载程序。我试过这个:

<Property Id="OLD_APPLICATION_A_UNINSTALLSTRING">
  <RegistrySearch Id="OldAppAUninstallString" Root="HKLM" 
   Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{$(var.OldAppAInstallerGUID)}"
   Name="UninstallString" Type="raw"/>
</Property>

<InstallExecuteSequence>
  <Custom Action="UninstallAppA" Before="InstallInitialize">
    NOT Installed AND OLD_APPLICATION_A_UNINSTALLSTRING
  </Custom>
</InstallExecuteSequence>

<CustomAction Id="UninstallAppA" Directory="System32"
 ExeCommand="[OLD_APPLICATION_A_UNINSTALLSTRING] /qn" Execute="immediate" Return="check"/>

这导致安装失败和错误状态1618:&#34;另一个安装已在进行中。在继续此安装之前完成该安装。&#34;只有一个其他安装正在进行中,此安装...

有没有办法在WiX中从安装程序运行卸载程序?

我也有一个bootstrapper,也许我应该以某种方式从那里运行这些卸载。但是我希望尽可能晚地运行它们,以防用户取消安装。如果发生这种情况,如果旧的应用程序套件消失,它看起来并不太好......

1 个答案:

答案 0 :(得分:1)

在MSI中,有一个互斥锁可以防止两个安装事务(执行序列)同时运行,从而导致错误。

您可以使用其他升级元素通过UpgradeCode / Version / Lanugage查找它们,并在安装过程中将其删除。