Wix的util:CloseApplication扩展似乎不起作用

时间:2010-06-04 20:26:17

标签: wix close-application

我正在尝试使用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>

3 个答案:

答案 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"/>