- unit Service;
-
- interface
- uses Windows,Messages,SysUtils,Winsvc,Dialogs;
-
- function StartServices(Const SvrName:String):Boolean;
- function StopServices(Const SvrName:String):Boolean;
- function QueryServiceStatu(Const SvrName: String):String;
- function CreateServices(Const SvrName,FilePath:String):Boolean;
- function DeleteServices(Const SvrName: String):Boolean;
-
- implementation
-
-
- function StartServices(Const SvrName: String): Boolean;
- var
- a,b:SC_HANDLE;
- c:PChar;
- begin
- Result:=False;
-
- a:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
-
- if a <=0 then Exit;
-
- b:=OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS);
-
- if b <=0 then Exit;
- try
- Result:=StartService(b,0,c);
- CloseServiceHandle(b);
- CloseServiceHandle(a);
- except
- CloseServiceHandle(b);
- CloseServiceHandle(a);
- Exit;
- end;
- end;
-
-
-
- function StopServices(Const SvrName: String): Boolean;
- var
- a,b: SC_HANDLE;
- d: TServiceStatus;
- begin
- Result := False;
-
- a :=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
-
- if a <=0 then Exit;
-
- b:=OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS);
-
- if b <=0 then Exit;
- try
- Result:=ControlService(b,SERVICE_CONTROL_STOP,d);
- CloseServiceHandle(a);
- CloseServiceHandle(b);
- except
- CloseServiceHandle(a);
- CloseServiceHandle(b);
- Exit;
- end;
- end;
-
-
-
- function QueryServiceStatu(Const SvrName: String): String;
- var
- a,b: SC_HANDLE;
- d: TServiceStatus;
- begin
- Result := ‘未安装‘;
-
- a := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
-
- if a <=0 then Exit;
-
- b := OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS);
-
- if b <= 0 then Exit;
- try
- QueryServiceStatus(b,d);
- if d.dwCurrentState = SERVICE_RUNNING then
- Result := ‘启动‘
- else if d.dwCurrentState = SERVICE_RUNNING then
- Result := ‘Wait‘
- else if d.dwCurrentState = SERVICE_START_PENDING then
- Result := ‘Wait‘
- else if d.dwCurrentState = SERVICE_STOP_PENDING then
- Result := ‘停止‘
- else if d.dwCurrentState = SERVICE_PAUSED then
- Result := ‘暂停‘
- else if d.dwCurrentState = SERVICE_STOPPED then
- Result := ‘停止‘
- else if d.dwCurrentState = SERVICE_CONTINUE_PENDING then
- Result := ‘Wait‘
- else if d.dwCurrentState = SERVICE_PAUSE_PENDING then
- Result := ‘Wait‘;
-
- CloseServiceHandle(a);
- CloseServiceHandle(b);
- except
- CloseServiceHandle(a);
- CloseServiceHandle(b);
- Exit;
- end;
- end;
-
-
-
- function CreateServices(Const SvrName,FilePath: String): Boolean;
- var
- a,b:SC_HANDLE;
- begin
- Result:=False;
- if FilePath =‘‘ then Exit;
-
- a := OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE);
-
- if a <= 0 then Exit;
- try
- b := CreateService(a,PChar(SvrName),
- PChar(SvrName),
- SERVICE_ALL_ACCESS,
- SERVICE_INTERACTIVE_PROCESS or SERVICE_WIN32_OWN_PROCESS,
- SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,
- PChar(FilePath),nil,nil,nil,nil,nil);
- if b <= 0 then begin
- ShowMessage( SysErrorMessage( GetlastError ));
- Exit;
- end;
- CloseServiceHandle(a);
- CloseServiceHandle(b);
-
- Result := True;
- except
- CloseServiceHandle(a);
- CloseServiceHandle(b);
- Exit;
- end;
- end;
-
-
-
- function DeleteServices(Const SvrName: String): Boolean;
- var
- a,b:SC_HANDLE;
- begin
- Result:=False;
- a := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
- if a <= 0 then Exit;
- b :=OpenService(a,PChar(SvrName),STANDARD_RIGHTS_REQUIRED);
- if b <= 0 then Exit;
- try
- Result := DeleteService(b);
-
- if not Result then
- ShowMessage(SysErrorMessage(GetlastError));
- CloseServiceHandle(b);
- CloseServiceHandle(a);
- except
- CloseServiceHandle(b);
- CloseServiceHandle(a);
- Exit;
- end;
- end;
- end.
- 调用方法:
-
- StartServices(服务名);
-
- StopServices(服务名);
-
- CreateServices(服务名,exe文件路径);
-
- DeleteServices(服务名);
-
- string:=QueryServiceStatu(服务名);
http://blog.csdn.net/yanjiaye520/article/details/7840911
Delphi 服务操作
原文:http://www.cnblogs.com/findumars/p/4999279.html