delphi编程启动服务停止服务新建服务的方法


本文整理自网络,侵删。

 本文主要讲解了如何使用delphi新建服务,停止系统服务,以及获取服务状态和新建系统服务器的方法,以下是关键代码:

unit Servicescontrol;
    
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(服务名);

相关阅读 >>

Delphi fmx 安卓跳转到支付宝付款页面

Delphi 串口查询所有com口

Delphi6-xe5 中的md5实现方法

Delphi isdirectory 判断是否是目录

Delphi url编码与解码工具附代码

Delphi 10.3.1新的变量的声明方法

Delphi 反外挂,反破解思想代码

Delphi cef4 忽略不安全网站

Delphi webbrowser1使用进度条查看浏览器状态

Delphi 中的md5实现方法及Delphi2009和Delphi2010中用法

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...