【问题标题】:get the full path from a PID using delphi使用delphi从PID获取完整路径
【发布时间】:2011-05-09 20:54:27
【问题描述】:

我需要从 PID 获取完整路径。

我已经检查了这个问题C++ Windows - How to get process path from its PID 我写了以下代码:

 function GetFullPathFromPID(PID: DWORD): string;
 var
    hProcess: THandle;
    ModName : Array[0..MAX_PATH + 1] of Char;
 begin
   Result:='';
    hProcess := OpenProcess(PROCESS_ALL_ACCESS,False, PID);
    try
      if hProcess <> 0 then
       if GetModuleFileName(hProcess, ModName, Sizeof(ModName))<>0 then
         Result:=ModName
        else
         ShowMessage(SysErrorMessage(GetLastError));
    finally
     CloseHandle(hProcess);
    end;
 end;

但总是返回此消息:

找不到指定的模块

如何从 PID 中获取完整路径?

【问题讨论】:

    标签: delphi delphi-xe


    【解决方案1】:

    您需要使用GetModuleFileNameEx 函数。来自 MSDN:

    GetModuleFileName函数

    检索 文件的完全限定路径 包含指定的模块。 该模块必须已由 当前进程。

    为一个模块定位文件 被另一个进程加载,使用 GetModuleFileNameEx 函数。

    使用示例 (uses PsAPI):

    function GetPathFromPID(const PID: cardinal): string;
    var
      hProcess: THandle;
      path: array[0..MAX_PATH - 1] of char;
    begin
      hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
      if hProcess <> 0 then
        try
          if GetModuleFileNameEx(hProcess, 0, path, MAX_PATH) = 0 then
            RaiseLastOSError;
          result := path;
        finally
          CloseHandle(hProcess)
        end
      else
        RaiseLastOSError;
    end;
    

    【讨论】:

    • Win7:即使以管理员身份运行或在 OpenProcess 调用中使用 PROCESS_QUERY_LIMITED_INFORMATION 选项,我也会不断收到“拒绝访问”错误。知道为什么吗?
    猜你喜欢
    • 2019-08-10
    • 1970-01-01
    • 2011-12-11
    • 2014-12-08
    • 1970-01-01
    • 2010-10-14
    • 2018-08-13
    • 2017-03-16
    相关资源
    最近更新 更多