如何检查进程是否因服务而死亡

时间:2019-03-08 11:45:48

标签: c# winforms

从C#服务中,如何检查另一个应用程序是否已死?

我尝试使用Process.Responding,它返回true,但该应用程序已终止。

enter image description here

这是代码:

private List<string> getListStringGAppPath()
    {
        List<string> listGAppPaths = new List<string>();
        Process[] processes = Process.GetProcessesByName("MyApp");

        if (processes.Length > 0)
        {
            for (int i = 0; i < processes.Length; i++) {
                listGAppPaths.Add(processes[i].Responding.ToString() + "@@@@@@" + processes[i].MainModule.FileName);
                //processes[i].Responding.ToString() always return True
            }
            return listGAppPaths;
        }
        else
        {
            return null;
        }
    }

3 个答案:

答案 0 :(得分:0)

当进程终止时,Windows似乎将其状态切换为Suspended,您可以尝试首先检查其状态。也在这里:Detecting process crash in .NET

答案 1 :(得分:0)

您可以使用System.Diagnostics.Process中的方法来获取过程信息。

GetProcessesByName(String)

创建一组新的Process组件,并将它们与本地计算机上共享指定进程名称的所有进程资源相关联。

GetProcessById(Int32)

在给定本地计算机上进程的标识符的情况下,返回一个新的Process组件。

GetProcesses()

为本地计算机上的每个流程资源创建一个新的流程组件。

如果该进程不存在,那么它一定已经死了吗?

答案 2 :(得分:0)

您可以检查进程是否响应:

foreach (var process in System.Diagnostics.Process.GetProcesses())
{
    Console.WriteLine("Process Name: {0}, Responding: {1}", process.ProcessName, process.Responding);
}

类似于此答案: Check status of process