我正在尝试使用Wix在卸载之前关闭进程。我已经确认只要有一个可见的窗口就可以正常工作,但是如果没有可见的窗口(大多数情况下这个应用都属于系统托盘应用程序),卸载程序就会挂起,并且最终继续卸载,让流程继续运行。
根据this forum post,似乎Wix在过去关闭最小化的应用程序时遇到了麻烦,所以我想知道这是否相关?
有什么建议我可以做些什么来确保流程关闭?有什么方法可以尝试使用Win32 api在我的应用程序中捕获消息吗?
这是CloseApplication声明:
<util:CloseApplication Id="CloseApp" CloseMessage="yes" Target="App.exe" RebootPrompt="yes" />
这是自定义操作:
<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom>
答案 0 :(得分:4)
您似乎在安装事务之前安排WixCloseApplications
自定义操作。自定义操作的工作方式是调度实际关闭应用程序的延迟操作。除非在交易期间发生(After="InstallInitialize"
),否则它无法完成这项工作。
修复可能非常简单。删除Custom/@Action="WixCloseApplications"
元素。
答案 1 :(得分:1)
首先,不要忘记引用 WixUtilExtension.dll 程序集。 还要检查 Wix 元素是否包含 UtilExtension 命名空间的定义:
IntegerProperty property = new SimpleIntegerProperty();
property.bind(myListView.getSelectionModel().selectedIndexProperty());
我注意到您应该在InstallInitialize之前更改要执行的自定义操作。
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
如果您应用这些更改并且CloseApplications扩展程序无效,请尝试使用
记录安装过程<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom>
答案 2 :(得分:-1)
我也遇到了这个问题。 将Before属性更改为&#34; InstallValidate&#34;为我工作。
<Custom Before="InstallValidate" Action="WixCloseApplications"/>