我試圖檢索進程的信息和我知道,我可以使用:檢索過程描述信息
Process[] myProcesses = Process.GetProcesses();
,但我怎麼檢索過程的描述?它是通過一些Win32 API調用嗎?我正在運行Vista,當我點擊任務管理器中的進程選項卡時,我看到了說明。
我試圖檢索進程的信息和我知道,我可以使用:檢索過程描述信息
Process[] myProcesses = Process.GetProcesses();
,但我怎麼檢索過程的描述?它是通過一些Win32 API調用嗎?我正在運行Vista,當我點擊任務管理器中的進程選項卡時,我看到了說明。
您在任務管理器中看到的實際上是可執行映像的說明字段。
您可以使用GetFileVersionInfo()
和VerQueryValue()
WinAPI調用來訪問各種版本信息,例如, CompanyName或FileDescription。
對於.Net方式,請使用FileVersionInfo
的FileDescription
成員,用通過Process.MainModule.FileName
獲取的可執行文件名進行實例化。
另一種方式是通過Assembly
。從可執行映像加載程序集,然後查詢AssemblyDescriptionAttribute
自定義屬性。
這是我能看到做到這一點的唯一途徑。我嘗試了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();
}
}
}
你只需要進一步下去的屬性。 假設你有一個記事本正在運行的實例。
Process[] proc = Process.GetProcessesByName("notepad");
Console.WriteLine("Process version- " + proc[0].MainModule.FileVersionInfo.FileVersion);
Console.WriteLine("Process description- " + proc[0].MainModule.FileVersionInfo.FileDescription);
你走了!