【问题标题】:How To Get The Process Description Based On Process ID?(c#.net)如何根据进程ID获取进程描述?(c#.net)
【发布时间】:2014-08-31 13:30:32
【问题描述】:

我尝试了两种方法来获取过程描述

解决方案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 文件或进程的属性详细信息窗口中提及,则无法获取进程描述。

例如:如果进程是谷歌浏览器。 ImageName:-chrome.exe 描述:谷歌浏览器 我想获取描述部分而不是图像名称。

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

【问题讨论】:

  • 您的解决方案 1 似乎是您需要做的。
  • @DavidHeffernan:-是的,但我有问题。当我试图获取具有 adim 权限的进程的文件描述时,它会抛出一个 win32 访问被拒绝异常。所以在这种情况下怎么能我得到了过程描述?
  • 为什么没有管理员权限?如果您不能这样做,请找到可执行文件的完整路径,并阅读版本信息资源以查找信息。
  • @DavidHeffernan:-我的要求是捕获所有用户的活动窗口详细信息,如应用程序标题、进程描述、开始时间和结束时间。所以所有用户都没有管理员权限。是的,我能够获得可执行文件的完整路径,但对于某些可执行文件,文件描述部分是空的。所以它返回的应该是空的。所以我想我应该从任务管理器那里得到描述

标签: .net winapi c#-4.0


【解决方案1】:

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

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

或者,您可以直接解析 PE 文件,我怀疑任务管理器等程序出于性能原因会这样做。但这会复杂得多。

【讨论】:

  • 感谢您的回复。我会试试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 2013-02-28
  • 2016-09-22
  • 2015-10-09
相关资源
最近更新 更多