2012-12-18 20 views
8

Próbowałem do tej pory na dwa sposoby.Jak uzyskać opis działającego procesu na zdalnym komputerze?

Pierwszy sposób, użyłem System.Diagnostics, ale dostaję NotSupportedException "Funkcja nie jest obsługiwana dla komputerów zdalnych" na MainModule.

foreach (Process runningProcess in Process.GetProcesses(server.Name)) 
{ 
    Console.WriteLine(runningProcess.MainModule.FileVersionInfo.FileDescription); 
} 

Drugi sposób, próbowałem za pomocą System.Management ale wydaje się, że Description z ManagementObject jest ona taka sama jak Name.

string scope = @"\\" + server.Name + @"\root\cimv2"; 
string query = "select * from Win32_Process"; 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); 
ManagementObjectCollection collection = searcher.Get(); 

foreach (ManagementObject obj in collection) 
{ 
    Console.WriteLine(obj["Name"].ToString()); 
    Console.WriteLine(obj["Description"].ToString()); 
} 

Czy ktoś mógłby wiedzieć o lepszym sposobie otrzymywania opisów uruchomionego procesu na zdalnym komputerze?

+0

Czy próbowałeś użyć wmigen Rob van der Woude? Może pomóc pokazać, co jest dostępne. http://www.robvanderwoude.com/wmigen.php – Lizz

+0

@Lizz Cóż, już próbowałem zapętlić właściwości obj i sprawdzić, czy Property.ToString() zawierał słowo kluczowe, które powinno być w opisie jeden z procesów, których szukam ... – athom

+0

Yikes. Przepraszam, nie mogę myśleć o niczym innym. :(To jest interesujące - i dziwne +1 dla dobrego kodu i rozwiązywania problemów! :) – Lizz

Odpowiedz

4

Cóż, myślę, że mam metodę robienia tego, która będzie działać wystarczająco dobrze dla moich celów. Zasadniczo otrzymuję ścieżkę do pliku od ManagementObject i otrzymuję opis z rzeczywistego pliku.

ConnectionOptions connection = new ConnectionOptions(); 
connection.Username = "username"; 
connection.Password = "password"; 
connection.Authority = "ntlmdomain:DOMAIN"; 

ManagementScope scope = new ManagementScope(@"\\" + serverName + @"\root\cimv2", connection); 
scope.Connect(); 

ObjectQuery query = new ObjectQuery("select * from Win32_Process"); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); 
ManagementObjectCollection collection = searcher.Get(); 

foreach (ManagementObject obj in collection) 
{ 
    if (obj["ExecutablePath"] != null) 
    { 
     string processPath = obj["ExecutablePath"].ToString().Replace(":", "$"); 
     processPath = @"\\" + serverName + @"\" + processPath; 

     FileVersionInfo info = FileVersionInfo.GetVersionInfo(processPath); 
     string processDesc = info.FileDescription; 
    } 
} 
Powiązane problemy