2012-08-14 41 views
5

Come posso ottenere un percorso di un processo in esecuzione per nome? Ad esempio, so che c'è un processo chiamato "notepad" in esecuzione, e voglio ottenere il percorso di esso. Come ottenere il percorso senza eseguire il ciclo di tutti gli altri processi?Ottenere un percorso di un processo in esecuzione per nome

Non in questo modo!

using System.Diagnostics; 

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

risposta

8

provare qualcosa di simile metodo, che utilizza il 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; 
    } 
} 

Occorre tuttavia tenere presente, che più processi possono avere lo stesso nome, quindi è ancora potrebbe essere necessario fare un po 'di scavo. Sto solo sempre restituendo il percorso del primo qui.

+0

vuoi dire qualcosa di simile (stringa fullpath = System.Diagnostics.Process.GetProcessesByName ("blocco note"). ToString();) No, non l'ho fatto. grazie –

+0

Ho modificato la mia risposta per rendere un po 'più chiaro ciò che intendevo. – FishBasketGordo

2

C'è un metodo GetProcessesByName che esisteva in .Net 2.0:

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

Ci sono due approcci si può prendere.

Si può fare processo per nome:

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

o si potrebbe fare quello che fai, ma utilizzare LINQ

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

.NET 2.0 non ha LINQ. – FishBasketGordo

Problemi correlati