Инсталляция и удаление сервисов под НТ

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

Автор: Alex Kantchev

WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****

>> Инсталляция/удаление сервисов под НТ.

Функции для создавания и удаления NT Services.

Можно создать NT Service от текущее приложение. Параметры:

1. CreateNTService(ExecutablePath,ServiceName: String)

ExecutablePath — Полный путь к изполнимого файла от которого создавается NT Service

ServiceName — Имя сервиза которое отобразится в Service Control Manager

Результат:

true — если операциая завершена успешно

false — если есть ошибка. Можно произвести call то

GetLastError чтобы информироваться об естество ошибки

2. DeleteNTService(ServiceName: String):boolean;

ServiceName — имя сервиза подлежающии удаления

Результат:

true — если операциая завершена успешно

false — если есть ошибка. Можно произвести call то GetLastError чтобы

информироваться об естество ошибки

Зависимости: WinSVC, Windows

Автор: Alex Kantchev, stoma@bitex.bg

Copyright: Собственное написание

Дата: 19 июня 2002 г.

***************************************************** }

// CreateNTService(ExecutablePath,ServiceName: String)

// ExecutablePath — Полный путь к изполнимого файла от

// которого создавается NT Service

// ServiceName — Имя сервиза которое отобразится

// в Service Control Manager Результат:

//Результат:

// true — если операциая завершена успешно

// false — если есть ошибка. Можно произвести

// call то GetLastError чтобы информироваться об

// естество ошибки

function CreateNTService(ExecutablePath, ServiceName: string): boolean;

var

hNewService, hSCMgr: SC_HANDLE;

// Rights: DWORD;

FuncRetVal: Boolean;

begin

FuncRetVal := False;

hSCMgr := OpenSCManager(nil, nil, SC_MANAGER_CREATE_SERVICE);

if (hSCMgr 0) then

begin

//Custom service access rights may be built here

//we use GENERIC_EXECUTE which is combination of

//STANDARD_RIGHTS_EXECUTE, SERVICE_START, SERVICE_STOP,

//SERVICE_PAUSE_CONTINUE, and SERVICE_USER_DEFINED_CONTROL

//You can create own rights and use them as shown in the

//commented line below.

//Rights := STANDARD_RIGHTS_REQUIRED or SERVICE_START or SERVICE_STOP

// or SERVICE_QUERY_STATUS or SERVICE_PAUSE_CONTINUE or

// SERVICE_INTERROGATE;

hNewService := CreateService(hSCMgr, PChar(ServiceName), PChar(ServiceName),

STANDARD_RIGHTS_REQUIRED, SERVICE_WIN32_OWN_PROCESS,

SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,

PChar(ExecutablePath), nil, nil, nil, nil, nil);

CloseServiceHandle(hSCMgr);

if (hNewService 0) then

FuncRetVal := true

else

FuncRetVal := false;

end;

CreateNTService := FuncRetVal;

end;

// ***

//DeleteNTService(ServiceName: String):boolean;

// ServiceName — имя сервиза подлежающии удаления

//Результат:

// true — если операциая завершена успешно

// false — если есть ошибка. Можно произвести call то GetLastError чтобы

// информироваться об естество ошибки

function DeleteNTService(ServiceName: string): boolean;

var

hServiceToDelete, hSCMgr: SC_HANDLE;

RetVal: LongBool;

FunctRetVal: Boolean;

begin

FunctRetVal := false;

hSCMgr := OpenSCManager(nil, nil, SC_MANAGER_CREATE_SERVICE);

if (hSCMgr 0) then

begin

hServiceToDelete := OpenService(hSCMgr, PChar(ServiceName),

SERVICE_ALL_ACCESS);

RetVal := DeleteService(hServiceToDelete);

CloseServiceHandle(hSCMgr);

FunctRetVal := RetVal;

end;

DeleteNTService := FunctRetVal;

end;

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);

var

tmpS: string;

begin

tmpS := ‘Delphi_Service_’ Application.Title;

if (CreateNTService(Application.ExeName, tmpS)) then

MessageDlg(‘Service ‘ tmpS ‘ has been successfully created!’,

mtInformation, [mbOK], 0)

else

MessageDlg(‘Unable to create service ‘ tmpS ‘ Win32 Error code: ‘

IntToStr(GetLastError), mtWarning, [mbOK], 0);

end;

procedure TForm1.Button2Click(Sender: TObject);

var

tmpS: string;

begin

tmpS := ‘Delphi_Service_’ Application.Title ‘1’;

if (DeleteNTService(tmpS)) then

MessageDlg(‘Service ‘ tmpS ‘ has been successfully deleted!’,

mtInformation, [mbOK], 0)

else

MessageDlg(‘Unable to delete service ‘ tmpS ‘ Win32 Error code: ‘

IntToStr(GetLastError), mtWarning, [mbOK], 0);

end;

{/codecitation}

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