分享

DELPHI启动或停止服务

 zengbj 2009-09-15
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
schService:SC_HANDLE;
schSCManager:SC_HANDLE;
ssStatus:TServiceStatus;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
  schService:=OpenService(schSCManager,'alerter',SERVICE_ALL_ACCESS);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CloseServiceHandle(schService);
  CloseServiceHandle(schSCManager);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Argv:PChar;
begin
  if StartService(schService,0,Argv) then
  begin
    form1.caption:='Start Service Now ';
    Sleep(1000);
    while (QueryServiceStatus(schService,ssStatus)) do
    begin
      Application.ProcessMessages;
      if ssStatus.dwCurrentState=SERVICE_START_PENDING then
      begin
        form1.caption:=form1.caption+('.');
        Sleep(1000);
      end else break;
    end;
    if ssStatus.dwCurrentState=SERVICE_RUNNING then
    form1.caption:='Service Start Ok'
    else form1.caption:='Service Start Fail';
  end
  else form1.caption:='Service Start Fail';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if ControlService(schService,SERVICE_CONTROL_STOP,ssStatus) then
  begin
    form1.caption:='Stopping Service Now ';
    Sleep(1000);
    while (QueryServiceStatus(schService,ssStatus)) do
    begin
      Application.ProcessMessages;
      if ssStatus.dwCurrentState=SERVICE_STOP_PENDING then
      begin
        form1.caption:=form1.caption+('.');
        Sleep(1000);
      end else break;
    end;
    if ssStatus.dwCurrentState=SERVICE_STOPPED then
    form1.caption:='Service Stop Ok'
    else form1.caption:='Service Stop Fail';
  end
  else form1.caption:='Service Stop Fail';
end;
end.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多