delphi 启动/停止服务

Delphi启动/停止Windows服务,启动类型修改为"自动"

unit U_StartServices;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinSVC, StdCtrls;

type
  TForm1 = class(TForm)
    btn_StartServices: TButton;
    btn_StopServices: TButton;

    procedure btn_StartServicesClick(Sender: TObject);
    procedure btn_StopServicesClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
function StartServices(const SvrName: string): Boolean;
implementation


{$R *.dfm}

//开启服务

function StartServices(const SvrName: string): Boolean;
var
  SCH, SvcSCH: SC_HANDLE;
  arg: PChar;
  dwStartType: DWORD;
begin
  Result := False;
  SCH := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if SCH <= 0 then Exit;
  SvcSCH := OpenService(SCH, PChar(SvrName), SERVICE_ALL_ACCESS);

  if (ChangeServiceConfig(
    SvcSCH,  //   handle   of   service
    SERVICE_NO_CHANGE,  //SERVICE_NO_CHANGE,   //   service   type:   no   change
    SERVICE_AUTO_START,  //   change   service   start   type
    SERVICE_NO_CHANGE,  //   error   control:   no   change
    nil,  //   binary   path:   no   change
    nil,  //   load   order   group:   no   change
    nil,  //   tag   ID:   no   change
    nil,  //   dependencies:   no   change
    nil,  //   account   name:   no   change
    nil,  //   password:   no   change
    nil)) then
    showmessage('Auto Start OK')
  else
    showmessage('Auto Start Error');


    if SvcSCH <= 0 then Exit;
  try
    Result := StartService(SvcSCH, 0, arg);
    CloseServiceHandle(SvcSCH);
    CloseServiceHandle(SCH);
  except
    CloseServiceHandle(SvcSCH);
    CloseServiceHandle(SCH);
    Exit;
  end;




end;

//停止服务

function StopServices(const SvrName: string): Boolean;
var
  SCH, SvcSCH: SC_HANDLE;
  SS: TServiceStatus;
begin
  Result := False;
  SCH := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  if SCH <= 0 then Exit;
  SvcSCH := OpenService(SCH, PChar(SvrName), SERVICE_ALL_ACCESS);
  if SvcSCH <= 0 then Exit;
  try
    Result := ControlService(SvcSCH, SERVICE_CONTROL_STOP, SS);
    CloseServiceHandle(SCH);
    CloseServiceHandle(SvcSCH);
  except
    CloseServiceHandle(SCH);
    CloseServiceHandle(SvcSCH);
    Exit;
  end;
end;


procedure TForm1.btn_StartServicesClick(Sender: TObject);
begin
  if StartServices('PolicyAgent') = true then
    application.MessageBox(PChar('PolicyAgent 服务启动成功'), PChar('服务信息'), MB_ICONINFORMATION)
  else
    application.MessageBox(PChar('PolicyAgent 服务启动失败'), PChar('服务信息'), MB_ICONERROR);
end;

procedure TForm1.btn_StopServicesClick(Sender: TObject);
begin
  if StopServices('PolicyAgent') = true then
    application.MessageBox(PChar('PolicyAgent 服务停止成功'), PChar('服务信息'), MB_ICONINFORMATION)
  else
    application.MessageBox(PChar('PolicyAgent 服务停止成功'), PChar('服务信息'), MB_ICONERROR);
end;

end.

function StartService(AServName: string): Boolean; //use WinSvc
var
  SCManager, hService: SC_HANDLE;
  lpServiceArgVectors: PChar;
begin
  SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  Result := SCManager <> 0;
  if Result then
  try
    hService := OpenService(SCManager, PChar(AServName), SERVICE_ALL_ACCESS);
    Result := hService <> 0;
    if (hService = 0) and (GetLastError = ERROR_SERVICE_DOES_NOT_EXIST) then
      Exception.Create('The specified service does not exist');
    if hService <> 0 then
    try
      lpServiceArgVectors := nil;
      Result := WinSvc.StartService(hService, 0, PChar(lpServiceArgVectors));
      if not Result and (GetLastError = ERROR_SERVICE_ALREADY_RUNNING) then
        Result := True;
    finally
      CloseServiceHandle(hService);
    end;
  finally
    CloseServiceHandle(SCManager);
  end;
end;


function StopService(AServName: string): Boolean;
var
  SCManager, hService: SC_HANDLE;
  SvcStatus: TServiceStatus;
begin
  SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  Result := SCManager <> 0;
  if Result then
  try
    hService := OpenService(SCManager, PChar(AServName), SERVICE_ALL_ACCESS);
    Result := hService <> 0;
    if Result then
    try  //停止并卸载服务;
      Result := ControlService(hService, SERVICE_CONTROL_STOP, SvcStatus);
      //删除服务,这一句可以不要;
//      DeleteService(hService);
    finally
      CloseServiceHandle(hService);
    end;
  finally
    CloseServiceHandle(SCManager);
  end;
end;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值