c#ManagementObjectSearcher用于通过PID查找进程(及其描述)

时间:2017-06-22 23:13:59

标签: c# .net

我正在制作一个应该列出流程的程序,当我点击某个流程时,它应该给我描述。

我的想法(实际上我修改了类似于我在网上找到的东西)是使用带有sql语句的ManagementObjectSearcher(“Select * From Win32_Process WHERE ProcessID =”+ a);其中“a”是包含进程ID的字符串变量。对于某些进程,它的工作(例如chrome,计算器)和某些进程没有(svchost,tiltweelmouse等)。

    private void Lista_procesa_prikaz_MouseClick(object sender, MouseEventArgs e)
    {
        string a = Lista_procesa_prikaz.Items[Lista_procesa_prikaz.FocusedItem.Index].SubItems[1].Text;
        var searcher = new ManagementObjectSearcher("Select * From Win32_Process WHERE ProcessID="+a);
        var proces = searcher.Get();
        foreach (var process in proces)
        {
            var processName = process["Name"];
            var processPath = process["ExecutablePath"];

            if (processPath != null)
            {
                var fileVersionInfo = FileVersionInfo.GetVersionInfo(processPath.ToString());
                var processDescription = fileVersionInfo.FileDescription;
                Description_textbox.Text = processDescription.ToString();
            }
       }
    }

如果有人在这里发现错误,我会非常高兴, 任何帮助表示赞赏

谢谢

编辑:部分解决的问题,如果有人关心,平台需要设置为x64(在我的情况下)。转到项目 yourProjectName 属性构建平台目标:x64

1 个答案:

答案 0 :(得分:0)

我不知道它是否必须来自ManagementObjectSearcher,但我可以建议获取相同数据的托管类。

var procs = System.Diagnostics.Process.GetProcesses()
    .Where(x => x.Id == 3116);

foreach(var p in procs)
    Console.WriteLine(p.ProcessName + p.Id);

如果您没有提升权限,则尝试阅读使用这两种方法的路径。至于获得这些权限,请考虑using a manifest