从C#服务中,如何检查另一个应用程序是否已死?
我尝试使用Process.Responding,它返回true,但该应用程序已终止。
这是代码:
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;
}
}
答案 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