La detección de un proceso ya se está ejecutando en Windows usando C # .net

¿Cómo detecto si un proceso ya se está ejecutando en el Administrador de tareas de Windows? Me gustaría obtener la memoria y el uso de la CPU también.

¿Has mirado en la clase System.Diagnostics.Process.

Ejemplo simple …

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

Vaya … olvidé el uso de mem, etc …

 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); } 

(Dejaré la mecánica de obtener los datos del método para usted; aquí son las 17:15, y estoy listo para irme a casa. 🙂

Puede utilizar System.Diagnostics.Process Class. Hay un método GetProcesses () y GetProcessesByName () que obtendrá una lista de todos los procesos existentes en una matriz. El objeto Proceso tiene toda la información que necesita para detectar si un proceso se está ejecutando.

Si desea conocer los procesos de IE que se están ejecutando:

 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(); } } 

Podría usar WMI para consultar algo en la línea de

 "SELECT * FROM Win32_Process WHERE Name = ''" 

Sin embargo, especialmente el uso del procesador es un poco complicado con WMI. Probablemente esté mejor con System.Diagnostics.Process, como sugirió Ian Jacobs .

Algo como esto:

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