Delphi下操作Windows Servie需要调用API函数,主要封装在 SvcMgr 和 WinSvc单元中,最近写了一个通用库,希望对大家有所帮助
Function ServiceIsRunning()
function ServiceIsRunning(ServiceName: string): Boolean;
var
SCManager: THandle;
HService: THandle;
ServiceStatus: TServiceStatus;
begin
Result := false;
if HInst = 0 then
Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), GENERIC_READ);
if HService <> 0 then
begin
if ControlService(HService, SERVICE_CONTROL_INTERROGATE, ServiceStatus) then
begin
// If QueryServiceStatus(hService, ServiceStatus) Then Begin
if ServiceStatus.dwCurrentState = SERVICE_RUNNING then
begin
Result := true;
end;
end;
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end
var
SCManager: THandle;
HService: THandle;
ServiceStatus: TServiceStatus;
begin
Result := false;
if HInst = 0 then
Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), GENERIC_READ);
if HService <> 0 then
begin
if ControlService(HService, SERVICE_CONTROL_INTERROGATE, ServiceStatus) then
begin
// If QueryServiceStatus(hService, ServiceStatus) Then Begin
if ServiceStatus.dwCurrentState = SERVICE_RUNNING then
begin
Result := true;
end;
end;
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end