【发布时间】:2009-07-28 05:18:14
【问题描述】:
我正在尝试检索流程信息,并且我知道我可以使用:
Process[] myProcesses = Process.GetProcesses();
但是如何检索流程描述?是通过一些 Win32 API 调用吗?我正在运行 Vista,当我在任务管理器的进程选项卡下单击时,我会看到说明。
【问题讨论】:
我正在尝试检索流程信息,并且我知道我可以使用:
Process[] myProcesses = Process.GetProcesses();
但是如何检索流程描述?是通过一些 Win32 API 调用吗?我正在运行 Vista,当我在任务管理器的进程选项卡下单击时,我会看到说明。
【问题讨论】:
您在任务管理器中看到的其实是可执行映像的描述字段。
您可以使用GetFileVersionInfo() 和VerQueryValue() WinAPI 调用来访问各种版本信息,例如公司名称或文件描述。
对于.Net 方式,使用FileVersionInfo 的FileDescription 成员,使用通过Process.MainModule.FileName 获得的可执行名称进行实例化。
另一种方法是通过Assembly。从可执行映像加载程序集,然后查询AssemblyDescriptionAttribute 自定义属性。
【讨论】:
您只需要进一步了解这些属性。 假设您正在运行一个记事本实例。
Process[] proc = Process.GetProcessesByName("notepad");
Console.WriteLine("Process version- " + proc[0].MainModule.FileVersionInfo.FileVersion);
Console.WriteLine("Process description- " + proc[0].MainModule.FileVersionInfo.FileDescription);
你去!
【讨论】:
这是我能想到的唯一方法。我尝试了 Process 和 Win32_Process,但没有成功。
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();
}
}
}
【讨论】: