2012-08-14 21 views
5

¿Cómo puedo obtener una ruta de un proceso en ejecución por su nombre? Por ejemplo, sé que se está ejecutando un proceso llamado "Bloc de notas", y quiero obtener su ruta de acceso. ¿Cómo obtener el camino sin pasar por todos los demás procesos?Obtener una ruta de un proceso en ejecución por nombre

¡No de esta manera!

using System.Diagnostics; 

foreach (Process PPath in Process.GetProcesses()) 
{ 
    if (PPath.ProcessName.ToString() == "notepad") 
    { 
     string fullpath = PPath.MainModule.FileName; 
     Console.WriteLine(fullpath); 
    } 
} 

Respuesta

8

intentar algo como este método, que utiliza el GetProcessesByName method:

public string GetProcessPath(string name) 
{ 
    Process[] processes = Process.GetProcessesByName(name); 

    if (processes.Length > 0) 
    { 
     return processes[0].MainModule.FileName; 
    } 
    else 
    { 
     return string.Empty; 
    } 
} 

Tenga en cuenta, sin embargo, que varios procesos pueden tener el mismo nombre, por lo que es posible que aún tenga que hacer algo de investigación. Siempre estoy devolviendo el primer camino aquí.

+0

¿quiere decir algo así como (cadena FullPath = System.Diagnostics.Process.GetProcessesByName ("Bloc de notas"). ToString();) No, no lo hice. gracias –

+0

enmendé mi respuesta para aclarar un poco lo que quise decir. – FishBasketGordo

2

hay un método GetProcessesByName que existía en .Net 2.0:

foreach (Process PPath in Process.GetProcessesByName("notepad")) 
{ 
    string fullpath = PPath.MainModule.FileName; 
    Console.WriteLine(fullpath); 
} 
1

En realidad, hay dos enfoques que puede tomar.

Usted puede hacer proceso por el nombre:

Process result = Process.GetProcessesByName("Notepad.exe").FirstOrDefault(); 

o usted podría hacer lo que hace, pero el uso de LINQ

Process element = (from p in Process.GetProcesses() 
        where p.ProcessName == "Notepad.exe" 
        select p).FirstOrDefault(); 
+0

.NET 2.0 no tiene LINQ. – FishBasketGordo

Cuestiones relacionadas