如何根据进程ID获取进程描述?(c#.net)

时间:2014-07-10 08:43:38

标签: .net winapi c#-4.0

我试过两种方式来获得过程描述

解决方法1: -

code:- Process proc = Process.GetProcessById(pid); string process_description= proc.MainModule.FileVersionInfo.FileDescription

问题: - 当我们尝试访问某些进程0(空闲),4(系统)或服务(具有管理员访问权限)的MainModule属性时 (很可能是那些在SYSTEM凭据下运行的用户)没有获得权限的用户将获得win32 ACCESS DENIED EXCEPTION。

解决方案2: -

 code :
 string process_description=FileVersionInfo.GetVersionInfo(modulePath).FileDescription;

问题: - 如果在具有管理员权限的exe文件或进程的属性详细信息窗口中未提及文件描述,则无法获取进程描述。

例如:如果进程是Google Chrome。 ImageName:-chrome.exe描述:谷歌chrome 我想让描述部分不是图像名称。

任何人都可以分享您的想法如何在taskmanager中获取特定进程ID的进程描述。

1 个答案:

答案 0 :(得分:2)

该信息包含在可执行文件的VERSIONINFO资源中。您正在寻找名为FileDescription的值。

使用LoadLibraryEx传递LOAD_LIBRARY_AS_IMAGE_RESOURCE。然后使用资源API FindResourceLoadResourceLockResource等获取版本信息资源。最后,解析出信息。

或者你可以直接解析PE文件,这是我怀疑像任务管理器这样的程序出于性能原因而做的。但那会更复杂。