您的位置:首页 > 编程语言 > Delphi

Delphi 下操作Windows 服务的代码

2007-03-06 11:13 423 查看
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;


end;




Function StopService()function StopService(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), SERVICE_ALL_ACCESS);


if HService <> 0 then


begin


if QueryServiceStatus(hService, ServiceStatus) then


begin


if ServiceStatus.dwCurrentState = SERVICE_RUNNING then


begin


Result := ControlService(hService, SERVICE_CONTROL_STOP, ServiceStatus);


end;


end;


CloseServiceHandle(HService);


end;


CloseServiceHandle(SCManager);


end;


end;




Function ServiceIsInstalled()function ServiceIsInstalled(ServiceName: string): Boolean;


var


SCManager: THandle;


HService: THandle;


begin


Result := false;


if HInst = 0 then


Exit;




if Assigned(OpenSCManager) and Assigned(OpenService) and


Assigned(CloseServiceHandle) then


begin


SCManager := OpenSCManager(nil, nil, GENERIC_READ);


if SCManager <> 0 then


begin


HService := OpenService(SCManager, PChar(ServiceName), GENERIC_READ);


Result := HService <> 0;


if HService <> 0 then


begin


CloseServiceHandle(HService);


end;


CloseServiceHandle(SCManager);


end;


end;


end;




Function StartService()function StartService(ServiceName: string): Boolean;


var


SCManager: THandle;


HService: THandle;


ServiceStatus: TServiceStatus;


Parms: PChar;


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), SERVICE_ALL_ACCESS);


if HService <> 0 then


begin


if QueryServiceStatus(hService, ServiceStatus) then


begin


if ServiceStatus.dwCurrentState = SERVICE_STOPPED then


begin


Parms := nil;


Result := DoStartService(hService, 0, Parms);


end;


end;


CloseServiceHandle(HService);


end;


CloseServiceHandle(SCManager);


end;


end;




Function ChangeServiceConfig()function ChangeServiceConfig(ServiceName: string; StartType: Integer): Boolean;


var


SCManager, HService: THandle;


PConfig: PQueryServiceConfigA;


Buf: DWORD;


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), SERVICE_ALL_ACCESS);


if HService <> 0 then


begin


New(PConfig);


QueryServiceConfigA(HService, PConfig, SizeOf(_QUERY_SERVICE_CONFIGA), Buf);


ChangeServiceConfigA(HService, PConfig.dwServiceType,


StartType, PConfig.dwErrorControl, PConfig.lpBinaryPathName,


PConfig.lpLoadOrderGroup, 0, PConfig.lpDependencies,


PConfig.lpServiceStartName, '', PConfig.lpDisplayName);




CloseServiceHandle(HService);


DisPose(PConfig);


Result := True;


end


else


Result := False;


CloseServiceHandle(SCManager);


end


else


Result := False;


end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: