【问题标题】:how to get process description using WMI?如何使用 WMI 获取进程描述?
【发布时间】:2012-05-13 09:52:44
【问题描述】:

我正在使用 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"]);
     }
}

【问题讨论】:

    标签: c# process wmi wmi-query


    【解决方案1】:

    它不是 WMI,但适用于本地计算机上的进程。

    你可能会发现一个进程的描述[原文如此。],实际上它是可执行文件的描述,使用GetVersionInfo。然后检查 FileDescription 和或 ProductName properties

    但请注意,不能保证此信息可用。尽管如此,这可能是您最好的选择。其他工具(例如 sysinternals 进程浏览器)也会显示该信息。

    【讨论】:

    • 嗯,我使用 WCF,客户端在循环中获取主机 PC 进程 [ID,Name,Desc,WorkingSet],您认为每次在循环中声明一个新的 GetVersionInfo 是个好主意吗?跨度>
    • 您必须按进程/可执行文件调用它。但是该值不会改变,即虽然您当然想为 WorkingSet 返回更新的值,但您不需要为版本信息这样做——您可以缓存它。这是否真的值得麻烦,与每次都调用它相比,有点难说。您必须进行一些测量,当然这取决于客户端调用服务器的频率(因此每个可执行文件调用 GetVersionInfo
    • 我已经找到了一条出路,当我得到进程列表时我会调用它一次,我只会在新进程启动或关闭时更新。感谢您的帮助
    【解决方案2】:

    您拥有Win32_Process class documentation 中的所有属性。看起来你运气不好,使用wbemtest 在我的机器上测试一些进程,我没有看到任何适合你需要的属性。进程可能不会公开此类信息。

    【讨论】:

    • 实际上在我使用 WMI 之前,我可以使用System. Diagnostics 获取描述,并且在 Windows 任务管理器中它还显示描述!!
    • 如果进程是本地的,你有 Christian.K 的建议。我只是假设我们不是因为 WMI 而在本地谈论。对于本地进程,使用 System.Diagnostics.Process 更有意义:msdn.microsoft.com/en-us/library/…
    • 我正在开发客户端-服务器应用程序,使用System.Diagnostics.Process 可能更快,但它不会返回整个进程,您需要以管理员身份运行才能获得其中的大部分,并且您需要拥有您的应用程序有两个版本可以在任何计算机上运行(x86、x64),所以我更喜欢使用 WMI。不幸的是,总会漏掉一些东西。
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多