2012-12-18 19 views
8

Tôi đã thử hai cách để thực hiện việc này cho đến nay.Làm cách nào để có được mô tả về quy trình đang chạy trên máy từ xa?

Cách đầu tiên, tôi đã sử dụng System.Diagnostics, nhưng tôi nhận được NotSupportedException của "Tính năng không được hỗ trợ cho máy từ xa" trên MainModule.

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

Cách thứ hai, tôi đã cố gắng sử dụng System.Management nhưng có vẻ như rằng Description của ManagementObject là cô giống như 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()); 
} 

Có ai biết cách nào tốt hơn để tìm hiểu mô tả quy trình đang chạy trên máy từ xa không?

+0

Bạn đã thử sử dụng wmigen của Rob van der Woude chưa? Nó có thể giúp hiển thị những gì có sẵn. http://www.robvanderwoude.com/wmigen.php – Lizz

+0

@Lizz Tôi đã thử lặp qua các thuộc tính của obj và kiểm tra xem Property.ToString() có chứa một từ khóa cần có trong mô tả của một trong những quy trình mà tôi đang tìm kiếm ... – athom

+0

Yikes. Xin lỗi, không thể nghĩ ra bất cứ điều gì khác. :(Điều này thật thú vị - và kỳ lạ. +1 cho mã tốt và xử lý sự cố! :) – Lizz

Trả lời

4

Tôi nghĩ tôi có phương pháp làm việc này sẽ hoạt động tốt cho mục đích của tôi. Tôi về cơ bản nhận được đường dẫn tập tin tắt của ManagementObject và nhận được mô tả từ các tập tin thực tế.

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; 
    } 
} 
Các vấn đề liên quan