题
我正在尝试在使用WIX卸载之前关闭一个过程。我已经确认只要有一个可见窗口,它就可以正常工作,但是如果没有可见的窗口(由于它是系统托盘应用程序,大多数情况下是这种情况),那么卸载器就会挂起,并且最终继续进行卸载,使过程运行。
根据 这个论坛帖子, ,似乎Wix过去曾经很难关闭最小化的应用程序,所以我想知道这是否相关?
关于我还能做些什么来确保该过程被关闭?有什么办法可以尝试使用Win32 API在我的应用中捕获该消息?
这是封闭式声明:
<util:CloseApplication Id="CloseApp" CloseMessage="yes" Target="App.exe" RebootPrompt="yes" />
这是自定义操作:
<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom>
解决方案
看起来您正在安排 WixCloseApplications
安装交易之前的自定义操作。自定义操作的工作方式是安排了实际关闭应用程序的延期操作。除非在交易期间发生,否则它不能做到这一点(After="InstallInitialize"
).
修复可能很容易。去除 Custom/@Action="WixCloseApplications"
元素。
其他提示
起初,别忘了参考 wixutilextension.dll 部件。还要检查是否 Wix 元素包含的定义 Utilextension 名称空间:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
我注意到您应该更改在installitialize之前执行的自定义操作。
<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom>
如果应用这些更改和闭合式扩展不起作用,请尝试使用记录安装过程
msiexec /i MyApplication.msi /l*v MyLogFile.txt
我也面临这个问题。将之前的属性更改为“ installValidate”对我有用。
<Custom Before="InstallValidate" Action="WixCloseApplications"/>
不隶属于 StackOverflow