我有一个Windows应用程序和使用WIX创建的安装程序。 APP有一个托盘图标,并根据该图标工作。
在卸载期间,应用必须退出。 我为此添加了自定义操作。
<CustomAction Id="ExitApp" FileKey="MYFILE" ExeCommand="/exit" Return="ignore" Execute="immediate" Impersonate="yes" />
<InstallExecuteSequence>
<Custom Action="ExitApp" Before="RemoveFiles"> (REMOVE="ALL")</Custom>
</InstallExecuteSequence>
然后使用命令行/退出调用EXE 并且APP杀死所有正在运行的实例。
String ^procName = Process::GetCurrentProcess()->ProcessName;
array<Process^> ^processes = Process::GetProcessesByName(procName);
if(args[0] == "/exit")
{
for each (Process^ p in processes)
{
int retry = 0;
while(!p->HasExited && retry<5)
{
p->CloseMainWindow();
p->Kill();
p->WaitForExit();
}
}
return 0;
}
但有时候应用程序的运行实例没有退出(特别是当有可见的窗口时)。
如果应用程序正在运行,有时会显示带有“继续之后应关闭以下应用程序”消息的对话框。
当用户单击此处的“忽略”按钮时,会出现此问题。 但在大多数情况下,应用程序会退出,即使单击忽略也是如此。但有时却不是。
我已经尝试添加日志,并发现代码始终执行但仍然没有终止应用程序,并且窗口是可访问的。 一旦我们手动退出应用程序,我们也找不到正在运行的实例 但是应用程序文件将从安装位置删除。
该应用程序是否有任何特定原因未退出。
我尝试将执行序列更改为安装验证之前/之后等。 但结果仍然相同。
有没有办法让应用程序始终退出。