应用程序即使在卸载后也在运行

时间:2015-03-11 18:54:50

标签: windows wix windows-installer custom-action

我有一个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;
    }

但有时候应用程序的运行实例没有退出(特别是当有可见的窗口时)。

如果应用程序正在运行,有时会显示带有“继续之后应关闭以下应用程序”消息的对话框。

当用户单击此处的“忽略”按钮时,会出现此问题。 但在大多数情况下,应用程序会退出,即使单击忽略也是如此。但有时却不是。

我已经尝试添加日志,并发现代码始终执行但仍然没有终止应用程序,并且窗口是可访问的。 一旦我们手动退出应用程序,我们也找不到正在运行的实例 但是应用程序文件将从安装位置删除。

该应用程序是否有任何特定原因未退出。

我尝试将执行序列更改为安装验证之前/之后等。 但结果仍然相同。

有没有办法让应用程序始终退出。

0 个答案:

没有答案