delphi 操作系统服务

来源:互联网 发布:程序员35岁以后干什么 编辑:程序博客网 时间:2024/04/30 01:40
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   :=   '启动'       //Run                 else   if   d.dwCurrentState     =   SERVICE_RUNNING   then                       Result   :=   'Wait'       //Runing                 else   if   d.dwCurrentState     =   SERVICE_START_PENDING then                       Result   :=   'Wait'       //Pause                 else   if   d.dwCurrentState     =   SERVICE_STOP_PENDING     then                       Result   :=   '停止'       //Pause                 else   if   d.dwCurrentState     =   SERVICE_PAUSED   then                       Result   :=   '暂停'       //Pause                 else   if   d.dwCurrentState     =   SERVICE_STOPPED   then                       Result   :=   '停止'     //Stop                 else   if   d.dwCurrentState     =   SERVICE_CONTINUE_PENDING     then                       Result   :=   'Wait'       //Pause                 else   if   d.dwCurrentState     =   SERVICE_PAUSE_PENDING   then                       Result   :=   'Wait';       //Pause                     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(服务名);
    
原创粉丝点击