• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
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.

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi与DirectX之DelphiX(55):TDIB.DoMosaic();发布时间:2022-07-18
下一篇:
DelphiTreeview用法介绍发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap