我正在使用32位的C ++ Windows应用程序,出于无法控制的原因,我需要保持32位。给定PID,此应用程序必须能够获取其他正在运行的进程的可执行文件的完整路径。
通常对于64位应用程序,您可以使用OpenProcess()
获取具有特定PID的进程的句柄,然后将其返回的句柄传递给GetModuleFileNameEx()
以获取其可执行路径。但是,如果您尝试从32位进程获取64位进程的句柄,则OpenProcess()
将失败,因此该方法对我不可用。 (这是this question的公认解决方案,但由于它和它的任何其他答案都不能解决从32位进程访问64位进程的问题,因此无法回答我的问题。)
有什么办法吗?
评论中已经提到了几种方法。
但是让我展示另一个:您可以利用WMI。
WMI class Win32_Process
有一个字段Win32_Process
,其中包含您要查找的信息。您也应该能够从32位进程中读取它。
这里是描述ExecutablePath
。
PowerShell中的示例:
how to read data from WMI using C++