Приверить, запущен ли сервис

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Падает комп с 16-го этажа и думает: «Вот бы сейчас зависнуть».

uses

WinSvc;

function ServiceGetStatus(sMachine, sService: PChar): DWORD;

{******************************************}

{*** Parameters: ***}

{*** sService: specifies the name of the service to open

{*** sMachine: specifies the name of the target computer

{*** ***}

{*** Return Values: ***}

{*** -1 = Error opening service ***}

{*** 1 = SERVICE_STOPPED ***}

{*** 2 = SERVICE_START_PENDING ***}

{*** 3 = SERVICE_STOP_PENDING ***}

{*** 4 = SERVICE_RUNNING ***}

{*** 5 = SERVICE_CONTINUE_PENDING ***}

{*** 6 = SERVICE_PAUSE_PENDING ***}

{*** 7 = SERVICE_PAUSED ***}

{******************************************}

var

SCManHandle, SvcHandle: SC_Handle;

SS: TServiceStatus;

dwStat: DWORD;

begin

dwStat := 0;

// Open service manager handle.

SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_CONNECT);

if (SCManHandle > 0) then

begin

SvcHandle := OpenService(SCManHandle, sService, SERVICE_QUERY_STATUS);

// if Service installed

if (SvcHandle > 0) then

begin

// SS structure holds the service status (TServiceStatus);

if (QueryServiceStatus(SvcHandle, SS)) then

dwStat := ss.dwCurrentState;

CloseServiceHandle(SvcHandle);

end;

CloseServiceHandle(SCManHandle);

end;

Result := dwStat;

end;

function ServiceRunning(sMachine, sService: PChar): Boolean;

begin

Result := SERVICE_RUNNING = ServiceGetStatus(sMachine, sService);

end;

// Check if Eventlog Service is running

procedure TForm1.Button1Click(Sender: TObject);

begin

if ServiceRunning(nil, ‘Eventlog’) then

ShowMessage(‘Eventlog Service Running’)

else

ShowMessage(‘Eventlog Service not Running’)

end;

{

Windows 2000 and earlier: All processes are granted the SC_MANAGER_CONNECT,

SC_MANAGER_ENUMERATE_SERVICE, and SC_MANAGER_QUERY_LOCK_STATUS access rights.

Windows XP: Only authenticated users are granted the SC_MANAGER_CONNECT,

SC_MANAGER_ENUMERATE_SERVICE,

and SC_MANAGER_QUERY_LOCK_STATUS access rights.

}

{

Do not use the service display name (as displayed in the services

control panel applet.) You must use the real service name, as

referenced in the registry under

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services

}

{/codecitation}

Добавить комментарий