我有一个引导程序(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案例所做的那样。
非常感谢。
答案 0 :(得分:0)
不幸的是,答案是否定的。 在维护操作期间,不会触发RemoveExistingProducts。 您将在日志文件中的某些行指示:
跳过RemoveExistingProducts操作:当前配置为维护模式或卸载
您尝试做的事情通常是通过使用引导程序应用程序来实现的。 你有没有探索过Wix的引导功能Burn? 烧伤应该能够轻松满足您的要求。
如果使用Burn不是您的选择,那么除了编写您自己的自定义代码以外,我没有看到任何其他选项。
希望这有帮助。