2012-05-13 36 views
0

我正在使用WMI查詢來獲取所有進程的列表,但我缺少的是進程描述! 當我使用「描述」屬性時,它看起來像這樣!如何使用WMI獲取進程描述?

Name : chrome.exe   Description : chrome.exe 

,但它應該是

Name : chrome.exe   Description : Google Chrome 

那麼,什麼是返回過程的描述屬性的名稱?

public void GetProcesses() 
{ 
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process"); 
    ManagementObjectCollection processList = searcher.Get(); 
    foreach (ManagementObject obj in processList) 
    { 
     Console.WriteLine("Name : {0}  Description : {1}",obj["Name"],obj["Description"]); 
    } 
} 

回答

0

這不是WMI,而是適用於本地計算機上的進程。

您可能會發現一個過程的描述[原文如此],實際上它是可執行文件的描述,使用GetVersionInfo。比檢查FileDescription和或產品名稱properties

但請注意,不能保證此信息可用。不過,這可能是你最好的選擇。其他工具,如sysinternals進程管理器,也會顯示該信息。

+0

好吧,即時消息使用WCF,客戶端獲得一個循環中的hostPC進程[ID,名稱,描述,工作集],你認爲每次在循環中聲明一個新的GetVersionInfo是個好主意嗎? –

+0

您必須按進程/可執行文件調用它。但值不會改變,即當您確實想要爲WorkingSet返回更新的值時,您不需要爲版本信息這麼做 - 您可以緩存它。有時候,與每次只調用它相比,這是否值得遇到麻煩,這有點難以說明。你必須做一些測量,當然這取決於客戶端調用服務器的頻率(因此每個可執行文件調用GetVersionInfo。) –

+0

我找到了一條出路,當我得到進程,我只更新如果一個新的進程啓動或關閉。感謝您的幫助 –

0

您擁有Win32_Process class documentation中的所有屬性。看起來你運氣不好,在我的機器上使用wbemtest測試一些進程,我沒有看到任何適合你需要的屬性。進程可能不會公開這些信息。

+0

實際上,在我使用WMI之前,我能夠使用'System獲取描述。診斷「,並在Windows任務管理器中也顯示說明! –

+0

如果這個過程是本地的,你有Christian.K的建議。我只是假設我們不是因爲WMI而在當地講話。對於本地進程,使用System.Diagnostics.Process更有意義:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx –

+0

即時通訊工作在客戶端服務器應用程序,使用' System.Diagnostics.Process'可能更快,但它不會返回整個進程,您需要以Admin身份運行才能獲得大部分進程,並且您需要有兩個版本才能在任何計算機上運行(x86,x64 )所以我更喜歡使用WMI。不幸的是,總會有一些錯過。 –