在安装时卸载另一个MSI

Web*_*Web 3 installer windows-installer installshield installshield-2010

我有一个基本的MSI项目.我需要在安装时删除另一个MSI产品,该产品现已集成到我们的主应用程序中.我尝试使用升级方案并将其视为主要升级.但是,这不起作用,因为我认为升级代码不匹配.

接下来,我还做了一个自定义操作,在CostFinalize之后运行了msiexec.exe(我认为这是在Installshield帮助中说明的.)这个工作完美,直到我安装在没有我想要删除的安装程序的系统上.如果未安装其他过时的产品,我的安装程序将失败.我试图在系统搜索设置的自定义操作上设置条件,但似乎系统搜索功能有限.我不能只检查一个reg键并设置一个布尔属性.

有任何想法吗?

Chr*_*ter 6

有几点需要考虑

1)UpgradeTable(FindRelatedProducts/RemoveExisting Products)可用于删除与其他产品的UpgradeCode关联的ProductCodes.

2)如果内存服务,MSI将不会在每机器安装期间(或反过来)删除每用户产品.背景必须相同.

3)在静默安装期间,UI序列不运行.

4)您无法从执行序列运行msiexec,因为每台计算机只有一个执行序列的系统范围的互斥锁.

5)如果您在UI中安排(我已经告诉过您不应该因为它在静默安装期间没有运行),还有另一个互斥锁,每个进程只有1个UI.

如果你是从每个用户到每个用户或每个机器到每台机器,我认为你应该能够使用升级元素/表行执行你想要的操作而不编写自定义操作是合理的.否则,在进入msiexec世界之前,您需要一个setup.exe样式的引导程序来处理卸载.