C++ Windows - 如何从PID获取进程路径

Sha*_*nte 13 c++ windows

如何在Windows上使用C++从PID中检索进程的完全限定路径?

Eme*_*gul 26

调用OpenProcess以获取与PID关联的进程的句柄.一旦掌握了流程,GetModuleFileNameEx就可以调用以获取其完全限定的路径.CloseHandle完成使用过程句柄后别忘了打电话.

这是一个执行所需调用的示例程序(用您的PID替换1234):

#include <windows.h>
#include <psapi.h> // For access to GetModuleFileNameEx
#include <tchar.h>

#include <iostream>

using namespace std;

#ifdef _UNICODE
  #define tcout wcout
  #define tcerr wcerr
#else
  #define tcout cout
  #define tcerr cerr
#endif

int _tmain(int argc, TCHAR * argv[])
{
  HANDLE processHandle = NULL;
  TCHAR filename[MAX_PATH];

  processHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, 1234);
  if (processHandle != NULL) {
    if (GetModuleFileNameEx(processHandle, NULL, filename, MAX_PATH) == 0) {
      tcerr << "Failed to get module filename." << endl;
    } else {
      tcout << "Module filename is: " << filename << endl;
    }
    CloseHandle(processHandle);
  } else {
    tcerr << "Failed to open process." << endl;
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 从 32 位环境调用以获取 64 位进程的 PID 时它是否有效?我遇到了问题,不得不使用 **QueryFullProcessImageName** 而不是 **GetModuleFileNameEx** (4认同)
  • 大多数模块在获取文件路径时失败:( (2认同)