Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检索进程描述信息_C#_.net - Fatal编程技术网

C# 检索进程描述信息

C# 检索进程描述信息,c#,.net,C#,.net,我正在尝试检索流程信息,我知道我可以使用: Process[] myProcesses = Process.GetProcesses(); 但是如何检索流程描述呢?它是通过一些Win32 API调用实现的吗?我正在运行Vista,当我在任务管理器中单击“进程”选项卡下的时,我看到了描述。这是我唯一可以看到的方法。我尝试了进程和Win32_进程,但没有成功 using System; using System.Collections.Generic; using System.Linq; usi

我正在尝试检索流程信息,我知道我可以使用:

Process[] myProcesses = Process.GetProcesses();

但是如何检索流程描述呢?它是通过一些Win32 API调用实现的吗?我正在运行Vista,当我在任务管理器中单击“进程”选项卡下的时,我看到了描述。

这是我唯一可以看到的方法。我尝试了进程和Win32_进程,但没有成功

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Diagnostics;

namespace Management
{
    class Program
    {
        static void Main(string[] args)
        {
            var ps = Process.GetProcesses();

            foreach (var p in ps)
            {
                try
                {
                    var desc = FileVersionInfo.GetVersionInfo(p.MainModule.FileName);
                    Console.WriteLine(desc.FileDescription);
                }
                catch
                {
                    Console.WriteLine("Access Denied");
                }
            }

            Console.ReadLine();
        }
    }
}

您在任务管理器中看到的实际上是可执行映像的描述字段

您可以使用
GetFileVersionInfo()
VerQueryValue()
WinAPI调用来访问各种版本信息,例如CompanyName或FileDescription

对于.Net方式,使用
FileVersionInfo
FileDescription
成员,使用通过
Process.MainModule.FileName
获取的可执行文件名进行实例化


另一种方法是通过
组装
。从可执行映像加载程序集,然后查询
AssemblyDescriptionAttribute
自定义属性。

您只需进一步查看属性即可。 假设您有一个运行记事本的实例

Process[] proc = Process.GetProcessesByName("notepad");
Console.WriteLine("Process version- " + proc[0].MainModule.FileVersionInfo.FileVersion);
Console.WriteLine("Process description- " + proc[0].MainModule.FileVersionInfo.FileDescription);
好了