تست اینکه آیا یک سرویس وجود دارد یا خیر | بلاگ

تست اینکه آیا یک سرویس وجود دارد یا خیر

تعرفه تبلیغات در سایت


function TForm1.ServiceIsPresent(sMachine, sService: PChar): Boolean;
var
SCManHandle, SvcHandle: SC_Handle;
begin
SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_CONNECT);
if (SCManHandle > 0) then
begin
SvcHandle := OpenService(SCManHandle, sService, SERVICE_QUERY_STATUS);
if (SvcHandle > 0) then
begin
Result := True;
CloseServiceHandle(SvcHandle);
end
else
Result := False;
CloseServiceHandle(SCManHandle);
end;
end;

روش استفاده :
if ServiceIsPresent(nil,pchar('sqlserver')) then
// some code
end;

در صورتیکه نام سرویس را میدانیم و میخواهیم فولدری که از آنجا اجرا شده را بیابیم :

function TForm1.GetServiceExecutablePath(strMachine: string; strServiceName: string): String;
var
hSCManager,hSCService: SC_Handle;
lpServiceConfig: PQueryServiceConfigA;
nSize, nBytesNeeded: DWord;
begin
Result := '';
hSCManager := OpenSCManager(PChar(strMachine), nil, SC_MANAGER_CONNECT);
if (hSCManager > 0) then
begin
hSCService := OpenService(hSCManager, PChar(strServiceName), SERVICE_QUERY_CONFIG);
if (hSCService > 0) then
begin
QueryServiceConfig(hSCService, nil, 0, nSize);
lpServiceConfig := AllocMem(nSize);
try
if not QueryServiceConfig(
hSCService, lpServiceConfig, nSize, nBytesNeeded) Then Exit;
Result := lpServiceConfig^.lpBinaryPathName;
finally
Dispose(lpServiceConfig);
end;
CloseServiceHandle(hSCService);
end;
end;
end;

روش استفاده :

mysql_dir := GetServiceExecutablePath('','mysql');

...
نویسنده : بازدید : 8 تاريخ : چهارشنبه 20 ارديبهشت 1396 ساعت: 10:36