Служба windows своїми руками, записки старого ит-шника

Необхідність запуску написаного на DELPHI додатки як служби (service) windows виникає не часто. В принципі як сервіс можна запускати будь-консольний додаток, але краще якщо програма буде спочатку скомпільована під такою запуск.

Мені було необхідно написати програму, яка періодично без участі оператора перечитувала список файлів XML і в залежності від наявності в них змін - заповнювала таблиці невеликої бази даних. Спочатку я думав запускати її у вигляді звичайного віконного програми, яка б за таймером стартувало кожен проміжок часу, робило свою справу і йшло в режим очікування, але в цьому випадку було б необхідно мінімальне, але все таки участь оператора, який власне тут нафіг і не потрібен.

У Delphi є спеціальний шаблон додатки який спочатку призначений для компіляції як служба Windows. Для того щоб створити такий додаток потрібно вибрати «Other» в меню «New» і у вікні, буде значок «Service Application», який нам і потрібен. Отримаємо порожній проект, який містить один модуль з компонентом класу TService, приблизно такий:

type
TService1 = class (TService)
procedure ServiceAfterInstall (Sender: TService);
procedure ServiceAfterUninstall (Sender: TService);
procedure ServiceStart (Sender: TService; var Started: Boolean);
procedure ServiceStop (Sender: TService; var Stopped: Boolean);
private

public
function GetServiceController: TServiceController; override;

end;

Два основних події, які обробляє - OnStart і OnStop, які відповідають відбуваються в момент запуску і зупинки сервісу по команді операційної системи, туди ми пишемо функціонал наприклад запуску і зупинки таймера (TTimer), зчитування і збереження параметрів і так далі.

columns: = TSTRingList.create;
Timer1.Enabled: = true;
started: = true;

з компонентом TService у візуальному середовищі розробки DELPHI можна працювати приблизно так само, як з компонентом TdataModule, тобто розміщуючи на нього інші невізуальні компоненти, наприклад той же TTimer.

Після компіляції програми ми отримуємо майже звичайний Exe-шник, який можна вбудувати в список служб Windows запустивши його з параметром / INSTALL.

Можна визначити функуціі для подій AfterInstall, де прописати дії, які буде виконувати служба на етапі інсталяції, такі як додавання опису або інших ключів до реєстру Windows.

Головне що потрібно пам'ятати - що служба зовсім не інтерактивна. Не можна виводити ніяких попереджень на екран, показувати будь-які екранні форми, а для повідомлень про помилки можна користуватися системними журналам Windows або файлами на диску.

Слід також стежити за витратою пам'яті такого додатка і дуже уважно поставитися до обробки винятків.

Привіт, Антон! Зробив все, як Ви описали. На жаль, служба запускається і відразу ж зупиняється видаючи повідомлення: Помилка 1053 - служба не відповіла своєчасно. Можна подивитися як написано Ваше додаток?

Схожі статті