Обнаружение процесса уже выполняется в Windows с использованием C # .net - PullRequest
7 голосов
/ 09 октября 2008

Как определить, запущен ли уже процесс в диспетчере задач Windows? Я хотел бы получить память и использование процессора, а также.

Ответы [ 6 ]

27 голосов
/ 09 октября 2008

Простой пример ...

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

Упс ... забыли использовать mem и т.д ...

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, и я готов идти домой.:)

7 голосов
/ 09 октября 2008

Посмотрели ли вы System.Diagnostics.Process Class.

3 голосов
/ 09 октября 2008

Если вы хотите узнать о запущенных процессах 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();                      
   }
}
3 голосов
/ 09 октября 2008

Вы можете использовать System.Diagnostics.Process Class.
Существует метод GetProcesses () и метод GetProcessesByName () , который будет получать список всех существующих процессов в массиве.

Объект Process содержит всю информацию, необходимую для обнаружения, если процесс запущен.

1 голос
/ 09 октября 2008

Вы можете использовать WMI для запроса чего-либо в соответствии с

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

Тем не менее, использование WMI немного сложнее. Возможно, вам лучше с System.Diagnostics.Process, как предложил Ян Джейкобс .

0 голосов
/ 09 октября 2008

Примерно так:

foreach ( WindowsProcess in Process.GetProcesses) 
{ 
    if (WindowsProcess.ProcessName == nameOfProcess) { 
        Console.WriteLine(WindowsProcess.WorkingSet64.ToString); 
        Console.WriteLine(WindowsProcess.UserProcessorTime.ToString); 
        Console.WriteLine(WindowsProcess.TotalProcessorTime.ToString); 
    } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...