2009-07-28 48 views
10

我試圖檢索進程的信息和我知道,我可以使用:檢索過程描述信息

Process[] myProcesses = Process.GetProcesses(); 

,但我怎麼檢索過程的描述?它是通過一些Win32 API調用嗎?我正在運行Vista,當我點擊任務管理器中的進程選項卡時,我看到了說明。

回答

11

您在任務管理器中看到的實際上是可執行映像的說明字段。

您可以使用GetFileVersionInfo()VerQueryValue() WinAPI調用來訪問各種版本信息,例如, CompanyName或FileDescription。

對於.Net方式,請使用FileVersionInfoFileDescription成員,用通過Process.MainModule.FileName獲取的可執行文件名進行實例化。

另一種方式是通過Assembly。從可執行映像加載程序集,然後查詢AssemblyDescriptionAttribute自定義屬性。

1

這是我能看到做到這一點的唯一途徑。我嘗試了Process和Win32_Process,但沒有去。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Management; 
using System.Diagnostics; 

namespace Management 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var ps = Process.GetProcesses(); 

      foreach (var p in ps) 
      { 
       try 
       { 
        var desc = FileVersionInfo.GetVersionInfo(p.MainModule.FileName); 
        Console.WriteLine(desc.FileDescription); 
       } 
       catch 
       { 
        Console.WriteLine("Access Denied"); 
       } 
      } 

      Console.ReadLine(); 
     } 
    } 
} 
10

你只需要進一步下去的屬性。 假設你有一個記事本正在運行的實例。

Process[] proc = Process.GetProcessesByName("notepad"); 
Console.WriteLine("Process version- " + proc[0].MainModule.FileVersionInfo.FileVersion); 
Console.WriteLine("Process description- " + proc[0].MainModule.FileVersionInfo.FileDescription); 

你走了!