2012-08-14 7 views
5

Jak uzyskać ścieżkę uruchomionego procesu według nazwy? Na przykład, wiem, że jest uruchomiony proces o nazwie "Notatnik" i chcę uzyskać jego ścieżkę. Jak uzyskać ścieżkę bez przechodzenia przez wszystkie inne procesy?Uzyskiwanie ścieżki działającego procesu według nazwy

Nie tędy!

using System.Diagnostics; 

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

Odpowiedz

8

Spróbuj coś jak tą metodą, która wykorzystuje 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; 
    } 
} 

Pamiętaj jednak, że wiele procesów może mieć taką samą nazwę, więc może jeszcze trzeba zrobić kilka kopania. Zawsze powracam tutaj pierwszą ścieżką.

+0

masz na myśli coś podobnego (ciąg fullpath = System.Diagnostics.Process.GetProcessesByName ("Notatnik") ToString();) Nie, nie zrobiłem. dziękuję –

+0

Poprawiłem moją odpowiedź, aby było trochę jaśniej, co miałem na myśli. – FishBasketGordo

2

Istnieje metoda GetProcessesByName które istniały w .NET 2.0:

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

Są naprawdę dwa podejścia, które można podjąć.

Można zrobić proces według nazwy:

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

czy można zrobić to, co robisz, ale używać LINQ

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

. NET 2.0 nie ma LINQ. – FishBasketGordo