我目前有一个带有引导程序的windows产品,可以在安装过程中运行5-6个MSIs。其中几个MSI可以通过直接在系统上运行这些MSI的更新版本来进行带外升级。bootstrapper当前用于在移除主产品时管理卸载所有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?
发布于 2013-11-18 21:53:22
一种可能的方法是让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从系统中移除……
发布于 2011-11-13 09:43:18
您应该能够通过使用upgrade表创建一个主要升级来卸载旧产品。也许你可以看看http://www.appdeploy.com/tips/detail.asp?id=106和http://msdn.microsoft.com/en-us/library/windows/desktop/aa372374(v=vs.85).aspx。
https://stackoverflow.com/questions/8099032
复制相似问题