Delphi的TService 服务路径获取 Dll中获取文件路径

研究delphi服务的路径,试了好几个方法 ,都没取出来,最后发现,要采用取DLL路径的方法

//一、获取Dll自身路径

//1)方法一:

Function GetDllPath(sDllName:string):string;

var

ModuleFileName:array[0..255] of char;

begin

//{取得dll的实际位置}

GetModuleFileName(GetModuleHandle(sDllName), @ModuleFileName[0], SizeOf(ModuleFileName));

Result := ModuleFileName;

end;

//2)方法二:

Function GetDllPath:string;

var

ModuleName:string;

begin

SetLength(ModuleName, 255);

//取得Dll自身路径

GetModuleFileName(HInstance, PChar(ModuleName), Length(ModuleName));

Result := PChar(ModuleName);

end;

// 二、获取调用程序路径

Function GetExecutPath:string;

var

ModuleName:string;

begin

SetLength(ModuleName, 255);

//取得调用Dll程序的路径

GetModuleFileName(GetModuleHandle(nil), PChar(ModuleName), Length(ModuleName));

Result := PChar(ModuleName);

end;

点击打开链接

Delphi遍历进程并获取进程路径

获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName

功能模块改良版:

unit UntModulePath;

interface

uses

Windows, SysUtils, PsAPI;

//获取EXE、Dll模块名称 或 路径

function GetModuleFileNameDef(GetPath: Boolean = True): string;

function GetWindowProcHandle(Wnd: HWND; GetPath: Boolean = True): string;

var

DllPath: string;

implementation

function GetModuleFileNameDef(GetPath: Boolean = True): string;

var

ModuleName: array [0..MAX_PATH - 1]of Char;

begin

FillChar(ModuleName, Length(ModuleName), 0);

//取得Dll自身路径

GetModuleFileName(HInstance, ModuleName, Length(ModuleName));

if GetPath then

Result := ExtractFilePath(StrPas(ModuleName))

else

Result := StrPas(ModuleName);

end;

function GetWindowProcHandle(Wnd: HWND; GetPath: Boolean = True): string;

var

pID: Cardinal;

hProc: THandle;

ModuleName: array [0..MAX_PATH - 1]of Char;

begin

Result := '';

if Wnd= 0 then

Exit;

FillChar(ModuleName, Length(ModuleName), 0);

GetWindowThreadProcessId(Wnd, pID);

hProc:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pID);

if hProc= 0 then

Exit;

try

GetModuleFileNameEx(hProc, 0, ModuleName, Length(ModuleName));

finally

CloseHandle(hProc);

end;

if GetPath then

Result := ExtractFilePath(StrPas(ModuleName))

else

Result := StrPas(ModuleName);

end;

initialization

DllPath:= GetModuleFileNameDef;

end.