如何卸载通过Wix Burn安装的第三方依赖项

时间:2019-08-23 21:48:05

标签: c# wix3.11

我目前有一个Wix Burn安装程序,可以安装多个程序,其中三个是第三方依赖项,最后一个是我自己的应用程序,它也是通过Wix构建的MSI安装程序。

安装效果很好,但是在Windows中通过“添加/删除程序”进行卸载的过程中,只有msi应用程序部分被正确卸载,第三方依赖项仍保留在计算机上并正在运行。

我已经为依赖项指定了UninstallCommand,但是没有一个受到尊重,因为这些依赖项是通过它们放置在自己的文件夹中的指定的uninstall.exe卸载的。

我需要与我的应用程序一起安装多个第三方依赖项,并且需要Windows“添加/删除程序”选项才能正确删除我的应用程序及其依赖项。

我已经尝试过包括一个名为MyApplicationUninstaller.exe的单独的MSI安装程序。感觉有点像骇客,但这就是它的样子

<InstallExecuteSequence>
  <Custom Action="ScriptToRemoveDependencies" After="InstallInitialize">(NOT WIX_UPGRADE_DETECTED) AND (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
</InstallExecuteSequence>

这个想法是在卸载时执行的,我想执行类似脚本的操作,该脚本找到所有依赖项的uninstall.exe,然后执行它们,但是我希望它只能在卸载时运行,而不是回滚。如果安装的一部分因某种原因失败并开始回滚,则我不希望此卸载程序运行。

下一步是我的刻录安装程序的外观: 请注意,卸载程序部分已被注释掉,因为如果任何部分失败,它将破坏以后的安装

<!--<MsiPackage Id="NP4_Uninstaller" Name="MyApplicationUninstaller.msi" 
SourceFile="MyApplicationUninstaller.msi"></MsiPackage>-->
<ExePackage SourceFile="DependencyA.exe" PerMachine="yes" UninstallCommand="/S /uninstall"/>
  <ExePackage SourceFile="DependencyB.exe" PerMachine="yes" UninstallCommand="/uninstall /S"/>
  <ExePackage SourceFile="DependencyC.exe" PerMachine="yes" UninstallCommand="/S"/>
  <MsiPackage SourceFile="MyApplication.msi" InstallCommand="/verysilent /norestart "/>

所有依赖项都已成功安装,但是在我安装时,仅MyApplication实际上已在计算机上卸载。从我可以看到,原始第三方安装程序似乎完全忽略了卸载命令。我知道这些依赖项会将它们自己的uninstall.exes放在它们自己的文件夹中,如何在卸载程序过程中让Wix Burn执行他们受人尊敬的卸载程序?

0 个答案:

没有答案