2012-12-18 58 views
8

मैंने अभी तक इसे पूरा करने के दो तरीकों की कोशिश की है।रिमोट मशीन पर चल रही प्रक्रिया का विवरण कैसे प्राप्त करें?

पहला तरीका, मैंने System.Diagnostics का उपयोग किया, लेकिन मुझे MainModule पर "फ़ीचर दूरस्थ मशीनों के लिए समर्थित नहीं है" के NotSupportedException मिलते हैं।

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

दूसरा तरीका, मैं System.Management का उपयोग कर प्रयास किया, लेकिन ऐसा लगता है कि ManagementObject की Description वह 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()); 
} 

क्या किसी को रिमोट मशीन पर चल रही प्रक्रिया के विवरण प्राप्त करने के बारे में बेहतर तरीके से पता चल जाएगा?

+0

क्या आपने रॉब वैन डेर वाउडे के Wmigen का उपयोग करने का प्रयास किया है? यह दिखाने में मदद कर सकता है कि क्या उपलब्ध है। http://www.robvanderwoude.com/wmigen.php – Lizz

+0

@Lizz ठीक है, मैंने पहले ही ओबीजे के गुणों के माध्यम से लूपिंग करने की कोशिश की है और यह देखने के लिए जांच की है कि क्या संपत्ति। TString() में एक ऐसा कीवर्ड है जो वर्णन में होना चाहिए था उन प्रक्रियाओं में से एक जो मैं खोज रहा हूं ... – athom

+0

यिक्स। क्षमा करें, किसी और चीज के बारे में सोच नहीं सकते। :(यह दिलचस्प कोड और समस्या निवारण के लिए दिलचस्प है - और अजीब +1! :) – Lizz

उत्तर

4

ठीक है मुझे लगता है कि मुझे ऐसा करने का एक तरीका मिला है जो मेरे उद्देश्यों के लिए पर्याप्त काम करेगा। मैं मूल रूप से ManagementObject के फ़ाइल पथ को बंद कर रहा हूं और वास्तविक फ़ाइल से विवरण प्राप्त कर रहा हूं।

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