WiX - 允许*手动*卸载一个msi以卸载另一个共享相同UpgradeCode的msi(而不仅仅是在MajorUpgrade期间)

时间:2015-07-22 21:47:09

标签: wix windows-installer installer wix3.7 wix3.8

我有一个引导程序(C#windows窗体应用程序),它会从其资源中连续触发两个不同的msi文件。 msi之间的实例转换是“配对的”,使得来自第一个msi的一个实例转换与来自第二个msi的一个实例转换共享UpgradeCode;这些是通过引导程序一起安装的对。

“核心”msi(运行的第一个msi)包含MajorUpgrade元素,这样当运行版本较高的“核心”msi时,首先卸载所有版本较低的相关产品 - 这包括安装的辅助程序通过第二个msi,因为它使用相同的UpgradeCode并被识别为相关产品。这是我想要的行为,这很好,但是如果我通过控制面板手动卸载'核心'msi程序,它只会安装那个。即使我手动卸载“核心”程序,我也想让它卸载辅助程序。

我是否需要编写一个自定义函数,使用ProductCode手动调用辅助msi程序的卸载?例如,按照这里:

Wix - uninstall different product

或者,我可以明确安排RemoveExistingProducts运行以进行卸载吗?类似的东西:

<InstallExecuteSequence>
  <RemoveExistingProducts After="InstallFinalize">REMOVE</RemoveExistingProducts>
</InstallExecuteSequence>

这是不可能的,因为在“核心”msi的InstallFinalize之后,它对辅助msi一无所知?基本上,我想知道我是否也可以使用RemoveExistingProducts标准操作手动卸载案例,就像它为MajorUpgrade案例所做的那样。

非常感谢。

1 个答案:

答案 0 :(得分:0)

不幸的是,答案是否定的。 在维护操作期间,不会触发RemoveExistingProducts。 您将在日志文件中的某些行指示:

跳过RemoveExistingProducts操作:当前配置为维护模式或卸载

您尝试做的事情通常是通过使用引导程序应用程序来实现的。 你有没有探索过Wix的引导功能Burn? 烧伤应该能够轻松满足您的要求。

如果使用Burn不是您的选择,那么除了编写您自己的自定义代码以外,我没有看到任何其他选项。

希望这有帮助。