我正在为我们的产品开发基于 WIX 的安装程序,该产品有一个基础产品和许多插件。基础版和插件将作为单独的 MSI 提供。仅当底座可用时才能安装插件。基础和插件在根文件夹下共享公共文件夹树,例如“C:\Program files\MyProduct”。
我正在使用自定义操作来卸载所有依赖插件。但插件无法正常卸载。这是非常随机的。有时三个插件被卸载,有时仅两个插件被卸载。但我可以从“添加/删除程序”中单独卸载插件。
我正在使用以下自定义操作...
<Fragment>
<CustomAction Id='UninstallP1Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p1.log" Execute='immediate' Return='asyncNoWait' />
<CustomAction Id='UninstallP2Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p2.log" Execute='immediate' Return='asyncNoWait' />
<CustomAction Id='UninstallP3Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p3.log" Execute='immediate' Return='asyncNoWait' />
<CustomAction Id='UninstallP4Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p4.log" Execute='immediate' Return='asyncNoWait' />
<CustomAction Id='UninstallP4Action' Directory='SystemFolder' ExeCommand="[SystemFolder]MSIExec.exe /X {PRODUCT_CODE_HERE} /qn /l* $(env.windir)\Temp\p4.log" Execute='immediate' Return='asyncNoWait' />
</Fragment>
我在我的产品脚本中调用此 CA,例如...
<!--Uninstall Plug-ins -->
<Custom Action='UninstallP1Action' After='InstallFinalize'>(REMOVE="ALL")</Custom>
<Custom Action='UninstallP2Action' After='UninstallP1Action'>(REMOVE="ALL")</Custom>
<Custom Action='UninstallP3Action' After='UninstallP2Action'>(REMOVE="ALL")</Custom>
<Custom Action='UninstallP4Action' After='UninstallP3Action'>(REMOVE="ALL")</Custom>
<Custom Action='UninstallP5Action' After='UninstallP4Action'>(REMOVE="ALL")</Custom>
我的问题是,
卸载base时如何彻底卸载所有插件?
当插件因卸载而丢失时,不会创建任何日志。但是当插件正确卸载时日志创建成功。如何检查这个?
我知道如何在单个 MSI 中创建功能(针对不同的插件)。但我们的计划是将插件作为单独的 MSI 提供。 WiX 中还有其他可能的方式吗?
任何帮助将非常感激!
卸载base时如何彻底卸载所有插件?
您的卸载自定义操作不会等待返回。因此,他们基本上是一个接一个地启动卸载命令,而不等待每个进程完成。
Windows Installer 不支持同时运行两个InstallExecuteSequences。因此两个卸载进程不能同时运行。由于您同时启动多个卸载进程,其中一些进程会失败。
解决方案是使用 BAT 文件来执行卸载命令。它会等待每个命令完成,然后再启动下一个命令。缺点是卸载完成后,您无法轻松地从目标计算机中删除该 BAT。
当插件因卸载而丢失时,不会创建任何日志。
但是当插件正确卸载时日志创建成功。
如何检查这个?
Windows Installer 自动检测冲突的安装或卸载进程。因此,您的插件卸载在开始写入日志之前就会失败。
我知道如何在单个插件中创建功能(针对不同的插件)
微星。但我们的计划是将插件作为单独的 MSI 提供。任何其他
WiX 中可用的可能方式吗?
并不真地。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)