我正在尝试在使用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"/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top