2015-05-27 61 views
0

在我们产品的一个安装程序版本中,我添加了一个自定义对话框(由CA使用session.Message()显示),询问用户是否希望在卸载时保留他的一些数据。WIX在进行重大升级时抑制卸载对话框?

CA的条件设置为REMOVE="ALL" AND NOT WIX_UPGRADE_DETECTED。 正常卸载时正确显示该对话框,但在主要升级时删除现有产品时也会显示该对话框。此时,安装程​​序会挂起,只能从任务管理器关闭安装程序,导致升级不正确。

包含问题的安装程序版本已发货。 我们可以在下一个安装程序版本中包含哪些内容(即进行重大升级),可以在删除现有产品时解决对话框问题?

回答

1

您需要修复原始版本的缓存MSI。在无提示安装事务期间不应该有任何UI。您需要制作原始内置MSI的副本,将其修改为不执行该自定义操作,然后使用msiexec/I foo.msi重新缓存它,重新安装= ALL REINSTALLMODE = vomus,然后才能执行主要升级。或者,告诉用户先进行卸载。这就是你在生产之前测试你的服务策略的原因。微星就像一架飞机......没有停止或返回按钮。你总是前进,你必须做出相应的规划。

+0

我已经在新版本(主要升级)中创建了一个CA,如您所描述的那样调用msiexec(使用更正后的msi)。该操作在FindRelatedProducts之后运行,但由于某些原因,缓存的msi未被替换,并且升级崩溃。但是,当我试图从控制台应用程序调用msiexec时,缓存的msi被正确替换。你知道为什么会发生这种情况吗? –

+0

MSI具有一个互斥体,可防止两个并发安装。一个msi不能安装另一个MSI(有效的recache)。您需要在运行新的MSI之前运行该命令。 –

+0

我猜测我必须在安装主要升级之前以某种方式从软件包中运行msiexec命令。或者,你的意思是我必须创建一个单独的应用程序来运行命令? –

2

属性UPGRADINGPRODUCTCODE在旧产品中设置,因为它正在被卸载。 WIX_UPGRADE_DETECTED在检测到传入的新升级设置时设置。

REMOVE =“ALL”且NOTGRADINGPRODUCTCODE的条件似乎是您想要的,显示的是在unallall期间的对话框,但不是在卸载时是因为主要升级。

+0

感谢您的建议。我知道现在和我已经在新版本上相应地设置了标志。问题出在以前的版本上,这个版本已经有了错误的标志。 –

+0

Chris的答案就是你所需要的 - 更改缓存的MSI,或者建立一个小升级来更新破损的已安装产品。 – PhilDW