usesWinsvc,..,;
function RunServies(svr:String):Boolean;//Æô¶¯Ä³¸ö·þÎñ£» var
schService:SC_HANDLE; schSCManager:SC_HANDLE; ssStatus:TServiceStatus; Argv:PChar; begin
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); schService:=OpenService(schSCManager,Pchar(svr),SERVICE_ALL_ACCESS);
result := True; try
if StartService(schService,0,Argv) then begin
while (QueryServiceStatus(schService,ssStatus)) do begin
Sleep(500);
Application.ProcessMessages;
if ssStatus.dwCurrentState=SERVICE_START_PENDING then Sleep(500) else
Break;
end;//while
if ssStatus.dwCurrentState=SERVICE_RUNNING then result := True else
result := False; end
else
result := False;
finally
CloseServiceHandle(schService); CloseServiceHandle(schSCManager);
end;
end;function StopServies(svr:String):Boolean;//ֹͣij¸ö·þÎñ£» var
schService:SC_HANDLE; schSCManager:SC_HANDLE; ssStatus:TServiceStatus; begin
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); schService:=OpenService(schSCManager,Pchar(svr),SERVICE_ALL_ACCESS); try
if ControlService(schService,SERVICE_CONTROL_STOP,ssStatus) then begin
Sleep(1000);
while (QueryServiceStatus(schService,ssStatus)) do begin
Application.ProcessMessages;
if ssStatus.dwCurrentState=SERVICE_STOP_PENDING then Sleep(1000) else break;
end; //while
if ssStatus.dwCurrentState=SERVICE_STOPPED then result := True else
result := False; end else
result := False; finally
CloseServiceHandle(schService); CloseServiceHandle(schSCManager); end; end;
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
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 := GENERIC_READ);
OpenService(SCManager,
PChar(ServiceName),
if HService <> 0 then begin if ControlService(HService, ServiceStatus) then begin
SERVICE_CONTROL_INTERROGATE,
// 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 ChangeServiceConfig(ServiceName: 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), string;
StartType:
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;
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务