2012-12-18 4 views
8

Ich habe bisher zwei Möglichkeiten ausprobiert.Wie erhält man die Beschreibung eines laufenden Prozesses auf einem entfernten Rechner?

Der erste Weg, ich habe System.Diagnostics, aber ich bekomme eine NotSupportedException "Feature wird nicht für Remote-Maschinen unterstützt" auf der MainModule.

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

Der zweite Weg, ich versuchte System.Management verwenden, aber es scheint, dass die Description der ManagementObject ist sie gleich die Name.

Würde jemand zufällig einen besseren Weg kennen, um die Beschreibungen eines laufenden Prozesses auf einer Remote-Maschine zu erhalten?

+0

Haben Sie versucht, Rob van der Woudes wmigen zu verwenden? Es könnte helfen zu zeigen, was verfügbar ist. http://www.robvanderwoude.com/wmigen.php – Lizz

+0

@Lizz Nun habe ich schon versucht, die Eigenschaften von obj durchzulaufen und überprüft, ob die Property.ToString() ein Schlüsselwort enthielt, das in der Beschreibung sein sollte Einer der Prozesse, die ich suche ... – athom

+0

Huch. Entschuldigung, mir fällt nichts ein. :(Das ist interessant - und ungerade. +1 für guten Code und Fehlerbehebung! :) – Lizz

Antwort

4

Nun, ich denke, ich habe eine Methode, dies zu tun, die gut genug für meine Zwecke funktioniert. Ich bekomme im Grunde den Dateipfad von ManagementObject und bekomme die Beschreibung von der eigentlichen Datei.

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; 
    } 
} 
Verwandte Themen