Ответ 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;