Остановка и запуск сервисов

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Postmaster

— Почему Билл Гейтс избегает интимных отношений с юзерами?

— Потому, что данное действие может быть квалифицировано, как незаконная попытка взять деньги дважды за, собственно говоря, однажды уже оказанный сервис.

Unit1.dfm

object Form1: TForm1

Left = 192

Top = 107

Width = 264

Height = 121

Caption = ‘Сервис’

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = ‘MS Sans Serif’

Font.Style = []

OldCreateOrder = False

PixelsPerInch = 96

TextHeight = 13

object Label1: TLabel

Left = 2

Top = 8

Width = 67

Height = 13

Caption = ‘Имя сервиса’

end

object Button1: TButton

Left = 4

Top = 56

Width = 95

Height = 25

Caption = ‘Стоп сервис’

TabOrder = 0

OnClick = Button1Click

end

object Button2: TButton

Left = 148

Top = 56

Width = 95

Height = 25

Caption = ‘Старт сервис’

TabOrder = 1

OnClick = Button2Click

end

object Edit1: TEdit

Left = 0

Top = 24

Width = 241

Height = 21

TabOrder = 2

Text = ‘Messenger’

end

end

Unit1.pas

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Winsvc;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Edit1: TEdit;

Label1: TLabel;

procedure Button1Click(Sender: TObject);

procedure StopService(ServiceName: string);

procedure Button2Click(Sender: TObject);

procedure StartService(ServiceName: string);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin

StopService(Edit1.Text);

end;

procedure TForm1.StopService(ServiceName: string);

var

schService,

schSCManager: DWORD;

p: PChar;

ss: _SERVICE_STATUS;

begin

p := nil;

schSCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);

if schSCManager = 0 then

RaiseLastWin32Error;

try

schService := OpenService(schSCManager, PChar(ServiceName),

SERVICE_ALL_ACCESS);

if schService = 0 then

RaiseLastWin32Error;

try

if not ControlService(schService, SERVICE_CONTROL_STOP, SS) then

RaiseLastWin32Error;

finally

CloseServiceHandle(schService);

end;

finally

CloseServiceHandle(schSCManager);

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

StartService(Edit1.Text);

end;

procedure TForm1.StartService(ServiceName: string);

var

schService,

schSCManager: Dword;

p: PChar;

begin

p := nil;

schSCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);

if schSCManager = 0 then

RaiseLastWin32Error;

try

schService := OpenService(schSCManager, PChar(ServiceName),

SERVICE_ALL_ACCESS);

if schService = 0 then

RaiseLastWin32Error;

try

if not Winsvc.startService(schService, 0, p) then

RaiseLastWin32Error;

finally

CloseServiceHandle(schService);

end;

finally

CloseServiceHandle(schSCManager);

end;

end;

end.

{/codecitation}

Добавить комментарий