这是我看一大哥写的,你看看 要控制一个service的具体流程大概是这样的: 1、取得服务数据库的handle 2、根据服务数据库的handle取得服务的handle 3、根据服务的handle来取服务的状态或者控制服务 这是一个控制sqlserver服务启动关闭的例子 uses winsvcprocedure TForm1.Button1Click(Sender: TObject); var hscmanager,hService:SC_HANDLE; lpServiceArgVectors:Pchar; returnstatus:TServiceStatus; begin lpServiceArgVectors:=nil; hscmanager:=OpenSCManager(nil,nil,SC_MANAGER_ENUMERATE_SERVICE);// 打开service control manager database hService:=OpenService(hscmanager,'MSSQLSERVER',SERVICE_ALL_ACCESS); case hService of ERROR_ACCESS_DENIED: Memo1.Lines.Add('The specified service control manager database handle does not have access to the service.'); ERROR_INVALID_HANDLE: Memo1.Lines.Add('The specified handle is invalid.'); ERROR_INVALID_NAME: Memo1.Lines.Add('The specified service name is invalid.'); ERROR_SERVICE_DOES_NOT_EXIST: Memo1.Lines.Add('The specified service does not exist.'); end; QueryServiceStatus(hService,returnstatus); //查看该Service的状态 case returnstatus.dwCurrentState of SERVICE_STOPPED: Memo1.Lines.Add('The service is not running.'); SERVICE_START_PENDING: Memo1.Lines.Add('The service is starting.'); SERVICE_STOP_PENDING: Memo1.Lines.Add('The service is stopping.'); SERVICE_RUNNING: memo1.lines.add('The service is running.'); SERVICE_CONTINUE_PENDING: Memo1.Lines.Add('The service continue is pending.'); SERVICE_PAUSE_PENDING: Memo1.Lines.Add('The service pause is pending.'); SERVICE_PAUSED: Memo1.Lines.Add('The service is paused'); end; if returnstatus.dwCurrentState=SERVICE_STOPPED then //如果该Service已停止则启动它 StartService(hService,0,lpServiceArgVectors); if returnstatus.dwCurrentState=SERVICE_RUNNING then ControlService(hService,SERVICE_CONTROL_STOP,returnstatus); //停止 CloseServiceHandle(hService);//关闭该Serviceend;
要控制一个service的具体流程大概是这样的:
1、取得服务数据库的handle
2、根据服务数据库的handle取得服务的handle
3、根据服务的handle来取服务的状态或者控制服务
这是一个控制sqlserver服务启动关闭的例子
uses winsvcprocedure TForm1.Button1Click(Sender: TObject);
var
hscmanager,hService:SC_HANDLE;
lpServiceArgVectors:Pchar;
returnstatus:TServiceStatus;
begin
lpServiceArgVectors:=nil;
hscmanager:=OpenSCManager(nil,nil,SC_MANAGER_ENUMERATE_SERVICE);// 打开service control manager database
hService:=OpenService(hscmanager,'MSSQLSERVER',SERVICE_ALL_ACCESS); case hService of
ERROR_ACCESS_DENIED: Memo1.Lines.Add('The specified service control manager database handle does not have access to the service.');
ERROR_INVALID_HANDLE: Memo1.Lines.Add('The specified handle is invalid.');
ERROR_INVALID_NAME: Memo1.Lines.Add('The specified service name is invalid.');
ERROR_SERVICE_DOES_NOT_EXIST: Memo1.Lines.Add('The specified service does not exist.');
end; QueryServiceStatus(hService,returnstatus); //查看该Service的状态
case returnstatus.dwCurrentState of
SERVICE_STOPPED: Memo1.Lines.Add('The service is not running.');
SERVICE_START_PENDING: Memo1.Lines.Add('The service is starting.');
SERVICE_STOP_PENDING: Memo1.Lines.Add('The service is stopping.');
SERVICE_RUNNING: memo1.lines.add('The service is running.');
SERVICE_CONTINUE_PENDING: Memo1.Lines.Add('The service continue is pending.');
SERVICE_PAUSE_PENDING: Memo1.Lines.Add('The service pause is pending.');
SERVICE_PAUSED: Memo1.Lines.Add('The service is paused');
end;
if returnstatus.dwCurrentState=SERVICE_STOPPED then //如果该Service已停止则启动它
StartService(hService,0,lpServiceArgVectors); if returnstatus.dwCurrentState=SERVICE_RUNNING then
ControlService(hService,SERVICE_CONTROL_STOP,returnstatus); //停止
CloseServiceHandle(hService);//关闭该Serviceend;