C ++ Windows - 如何从其PID获取进程路径(错误)

时间:2018-02-19 01:01:39

标签: c++ windows process path psapi

我想使用pid来获取流程的完整路径。

#include <psapi.h>

HANDLE processHandle = NULL;
TCHAR filename[MAX_PATH];

processHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, nPID);
if (processHandle != NULL) 
{
    if (GetModuleFileNameEx(processHandle, NULL, filename, MAX_PATH) == 0) 
    {
        //fail to get module file name
    } 
    else 
    {
        //module file name : filename
    }
    CloseHandle(processHandle);
} 
else 
{
    //fail to open process
}

这是使用pid获取进程路径的代码。

但是,当我执行它时,会发生以下错误。

(我使用的是visual c ++ 6.0。)

Linking...
Process01Dlg.obj : error LNK2001: unresolved external symbol _GetModuleFileNameExA@16
Debug/Process01.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
  • QueryFullProcessImageName
  • GetModuleFileName
  • GetModuleFileNameEx
  • GetProcessImageFileName

以上所有方法均导致错误。

这是版本的问题吗?

请回答。谢谢:))

1 个答案:

答案 0 :(得分:1)

您似乎忘了将产品与psapi.lib相关联。将其添加到项目依赖项中。

不确定它在VC6.0中是否可行。

但MSDN建议使用其他函数来检索进程名称:

  

要检索远程进程的主可执行模块的名称,请使用 GetProcessImageFileName QueryFullProcessImageName 函数。这比使用NULL模块句柄调用 GetModuleFileNameEx 函数更有效,更可靠。