无法关闭进程但会杀死

时间:2014-12-18 14:11:41

标签: c# multithreading process server

我有一个奇怪的问题。

我已经在一个项目上工作了很长时间,该项目打开和关闭(如果无法关闭,杀死)在我的本地计算机上完美运行但在服务器上出现问题的进程。

这段代码可以打开并终止进程,但在关闭它们时总是超时。

以下几行(' nt do)工作。

            Parallel.ForEach(Process.GetProcessesByName(applicationName),
            (Process obj) =>
            {
                AddLog("Waiting for " + obj.ProcessName + " to exit at " + DateTime.Now);
                obj.CloseMainWindow();
                obj.WaitForExit(60000);
            });
            System.Threading.Thread.Sleep(1000);
            if (Process.GetProcessesByName(applicationName).Length != 0)
            {
                AddLog("Process couldn't exited. Trying to kill at " + DateTime.Now);
                if ((killable).ToString() == "T")
                {
                    Parallel.ForEach(Process.GetProcessesByName(applicationName),
                    (Process obj) =>
                    {
                        obj.Kill();
                        AddLog(obj.ProcessName + " was killed at " + DateTime.Now);
                        EventLogEntry(obj.ProcessName + " was killed!!!!!", EventLogEntryType.Error, 4003);
                    });
                }
            }

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据CloseMainWindow的文档,无法保证在调用该方法时该进程将退出。您尝试关闭的进程可能正在显示模式对话框。未关闭的应用程序也可能没有图形界面(在这种情况下,您必须使用Kill来终止它)。相关文档如下。

  

通过调用CloseMainWindow退出进程的请求不会强制应用程序退出。应用程序可以在退出前请求用户验证,也可以拒绝退出。要强制退出应用程序,请使用Kill方法

     

如果CloseMainWindow失败,您可以使用Kill来终止该过程。 Kill是终止没有图形界面的进程的唯一方法。

我注意到CloseMainWindow返回bool。您可能想要尝试读取该值,如果是WaitForExit,则只需true。您还可以尝试远程访问服务器并将调试器连接到相关进程以查看它未关闭的原因。