有没有办法让“父”MSI卸载多个MSI?

时间:2011-11-11 19:36:54

标签: installer windows-installer

我目前有一个带有引导程序的Windows产品,在安装过程中运行5-6个MSI。通过在系统上直接运行这些MSI的较新版本,可以在带外升级其中几个MSI。当主要产品被删除时,引导程序当前用于管理卸载所有MSI。有没有办法从卸载逻辑中删除引导程序?我想找到一种卸载主要产品MSI的方法来处理所有其他'儿童'MSI的删除。

例如:我有一个产品安装程序Foo.exe,在安装过程中运行A.msi,B.msi和C.msi。在应用程序的生命周期中,用户将B.msi升级到B'.msi并将C.msi升级到C'.msi,现在用户安装了A.msi,B'.msi和C'.msi(仅限A. msi出现在ARP中)。如何卸载A.msi以删除B'.msi和C'.msi?

2 个答案:

答案 0 :(得分:0)

您应该可以通过使用升级表创作主要升级来卸载旧产品。也许请查看http://www.appdeploy.com/tips/detail.asp?id=106http://msdn.microsoft.com/en-us/library/windows/desktop/aa372374(v=vs.85).aspx

答案 1 :(得分:0)

一种可能的方法是让A.msi安装Uninstaller.msi。 Uninstaller.msi基本上是一个空的msi,其中包含用于A.msi,B.msi和C.msi的升级代码的升级表条目。 Uninstaller.msi还将PublishProduct标准操作条件设置为“0”,以便它永远不会运行。然后,A.msi手动将Uninstaller.msi挂钩到产品A ARP条目。当Uninstaller.msi运行时,它执行FindRelatedProducts,RemoveExistingProducts(删除所有3个msis),并完成而不将自己注册为由Windows安装。这可以在单个可回滚的事务中完成工作。唯一的诀窍就是找出如何在完成所有操作后将Uninstaller.msi从系统中移除...