2012-05-13 34 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。不幸的是,总会有一些错过。 –