使用C#.net在Windows中检测进程已在运行

时间:2008-10-09 15:52:19

标签: c# .net windows winforms

如何检测某个进程是否已在Windows任务管理器下运行?我也想获得内存和CPU使用率。

6 个答案:

答案 0 :(得分:27)

简单的例子......

bool processIsRunning(string process)
{
    return (System.Diagnostics.Process.GetProcessesByName(process).Length != 0);
}

糟糕...忘记了内存使用等......

bool processIsRunning(string process)
{
System.Diagnostics.Process[] processes = 
    System.Diagnostics.Process.GetProcessesByName(process);
foreach (System.Diagnostics.Process proc in processes)
{
    Console.WriteLine("Current physical memory : " + proc.WorkingSet64.ToString());
    Console.WriteLine("Total processor time : " + proc.TotalProcessorTime.ToString());
    Console.WriteLine("Virtual memory size : " + proc.VirtualMemorySize64.ToString());
}
return (processes.Length != 0);
}

(我会留下从方法中获取数据的机制 - 这是17:15,我准备回家了。)

答案 1 :(得分:7)

您是否查看了System.Diagnostics.Process班级。

答案 2 :(得分:3)

您可以使用System.Diagnostics.Process班级 有GetProcesses()GetProcessesByName()方法可以获取数组中所有现有进程的列表。

Process对象具有检测进程是否正在运行所需的所有信息。

答案 3 :(得分:3)

如果您想了解正在运行的IE进程:

System.Diagnostics.Process[] ieProcs = Process.GetProcessesByName("IEXPLORE");

if (ieProcs.Length > 0)
{
   foreach (System.Diagnostics.Process p in ieProcs)
   {                        
      String virtualMem = p.VirtualMemorySize64.ToString();
      String physicalMem = p.WorkingSet64.ToString();
      String cpu = p.TotalProcessorTime.ToString();                      
   }
}

答案 4 :(得分:1)

您可以使用WMI查询

"SELECT * FROM Win32_Process WHERE Name = '<your process name here>'"

但是,尤其是WMI处理器的使用有点棘手。使用System.Diagnostics.Process可能会更好,因为Ian Jacobs建议。

答案 5 :(得分:0)

这样的事情:

foreach ( WindowsProcess in Process.GetProcesses) 
{ 
    if (WindowsProcess.ProcessName == nameOfProcess) { 
        Console.WriteLine(WindowsProcess.WorkingSet64.ToString); 
        Console.WriteLine(WindowsProcess.UserProcessorTime.ToString); 
        Console.WriteLine(WindowsProcess.TotalProcessorTime.ToString); 
    } 
}