我目前有一个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执行他们受人尊敬的卸载程序?