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

4
我已经尝试了两种方法来获取进程描述。 解决方案1: 代码: Process proc = Process.GetProcessById(pid); string process_description= proc.MainModule.FileVersionInfo.FileDescription 问题:当我们尝试访问某些进程的MainModule属性时,例如0(空闲),4(系统)或服务(具有管理员访问权限)时(最可能是在SYSTEM凭据下运行的进程),用户没有权限会导致win32 ACCESS DENIED EXCEPTION。 解决方案2:
 code :
 string process_description=FileVersionInfo.GetVersionInfo(modulePath).FileDescription;

问题:如果exe文件或进程的属性细节窗口中没有说明文件描述,则无法获取进程描述,该进程具有管理员权限。

例如:如果进程是Google Chrome。 ImageName:chrome.exe 描述:Google Chrome 我想获取描述部分而不是图像名称。

请问有人能分享如何在任务管理器中获取特定进程ID的进程描述吗?


你的解决方案1似乎是你需要做的。 - David Heffernan
@DavidHeffernan:是的,但我遇到了问题。当我尝试获取具有管理员权限的进程的文件描述时,它会抛出win32访问拒绝异常。所以在这种情况下,我该如何获取进程描述? - Padma Yeddula
为什么你没有管理员权限?如果你无法获取管理员权限,可以找到可执行文件的完整路径,并读取版本信息资源以查找相关信息。 - David Heffernan
@DavidHeffernan:我的需求是捕获所有用户的活动窗口详细信息,如应用程序标题、进程描述、开始时间和结束时间。因此,所有用户都没有管理员权限。是的,我能够获取可执行文件的完整路径,但对于某些可执行文件,文件描述部分为空。所以它返回空值,这不应该发生。因此,我想从任务管理器中获取描述。 - Padma Yeddula
1个回答

2
信息包含在可执行文件的 VERSIONINFO 资源中。您要查找名为 FileDescription 的值。
使用 LoadLibraryEx 并传递 LOAD_LIBRARY_AS_IMAGE_RESOURCE。然后使用资源 API,FindResourceLoadResourceLockResource 等来获取版本信息资源。最后,解析出信息。
或者,出于性能原因,像任务管理器这样的程序可能直接解析 PE 文件。但那会更加复杂。

谢谢回复。我会尝试这个。 - Padma Yeddula

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接