我非常熟悉System.Diagnostics.Process类。但是,我想知道如何监控一个特定的进程(例如,检查它是否每隔XX分钟/秒运行一次)。我需要能够检查进程是否正在运行,如果正在运行,则继续初始化程序的其余部分。
谢谢,
-Zack
发布于 2009-03-31 21:40:38
如果不是自己启动进程,则可以通过查看Process.GetProcessesByName(...)或Process.GetProcesses(...)返回的列表来查找与进程关联的Process对象
一旦您有了这个过程,您就可以侦听读取它的属性(包括HasExited),并且(正如Jon在他的响应中提到的那样)如果您设置了EnableRaisingEvents,您就可以侦听它的事件(包括Exited)。
发布于 2009-03-31 21:39:41
检查它是否还在运行很容易:Process.HasExited。
但是,您可以将EnableRaisingEvents设置为true,并向Exited事件附加一个处理程序,而不是定期轮询。
编辑:回答评论中关于“获取”过程的问题--这取决于你已经知道了什么。如果你知道它的进程ID,你可以使用Process.GetProcessById。如果你只知道它的名字,你将不得不使用Process.GetProcessesByName,并弄清楚如果你得到多个结果该怎么做。如果您不知道确切的名称,您可以使用Process.GetProcesses并查找您所知道的有关它的任何信息。这些选项实际上是按偏好顺序排列的:)
发布于 2009-03-31 21:45:35
也许是这样的吧?
Process[] processlist = Process.GetProcesses();
bool found = false;
foreach (Process theprocess in processlist)
{
if(theprocess.ProcessName == "YourProcessName")
{
found = true;
break;
}
}
if (!found)
{
return;
}https://stackoverflow.com/questions/703176
复制相似问题