使用C#抓取運行中的執行緒資訊以及檔案資訊
一直以來都知道使用System.Diagnostics.Process.GetProcesses();可以取得系統中所有的執行緒,卻一直沒有深入地去瞭解,因為有太多的工具可以協助我查看這面的資訊,例如越來越強大的工作管理員(Task Manager),直到今天需要自己實作執行緒的取得時,才發現案情並不單純。原來我們在工作管理員中看到的應用程式名稱,其實是檔案描述,這一點你可以在執行檔案上點選右鍵>內容>詳細資料>檔案描述中,可以發現端倪。
如上圖所示,你在工作管理員中看到的應用程式名稱,其實是「檔案描述」。接下來的問題是,我們自己設計的程式,要如何來編輯更改這個描述呢?
如何在VisualStudio中進行「檔案描述」等資訊變更?
其實很簡單,打開專案總管>屬性>應用程式>組件資訊>標題,在標題中打入你想要的字串,這裡就是所謂的檔案描述。這裡設定的東西,在編譯後的執行檔中,你可以透過檔案總管(File Explorer)中的內容>詳細資料中看到對應的訊息。
透過C#抓取執行緒的相關資訊
接下來就更簡單了,直接調用.Net Framework中的System.Diagnostics.Process.GetProcesses(),透過Process物件類別就可以取得你想要的資訊。在此要特別注意的是,如果你今天編譯的是32Bit(x86)的程式,是不可以調用64Bit(x64)系統程式的相關訊息的,此外,如果你是UWP APP設計架構的執行緒,在調用上也有一定的權限限縮。
程式碼如下:
static void Main(string[] args)
{
foreach (System.Diagnostics.Process oItem in System.Diagnostics.Process.GetProcesses())
{
string cID = ""; //執行續ID
string cPN = ""; //執行檔名稱
string cFD = ""; //執行檔描述
try
{
cID = oItem.Id.ToString();
cPN = oItem.ProcessName;
cFD = oItem.MainModule.FileVersionInfo.FileDescription;
}
catch
{
//Access Denied
}
WriteLine($"PID: {cID}\nFileName: {cPN}\nFileDescription: {cFD}\n---");
}
}
執行結果如下: