Project

General

Profile

Общие принципы работы всех сервисов

Режимы запуска программы

Программа может быть запущена в четырех режимах:

  • режим Инсталлятора;
  • режим Конфигурации;
  • режим Сервиса;
  • режим Приложения (эмуляция работы сервиса).

Несколько экземпляров сервиса

В системе можно создавать более одного экземпляра сервиса, относящегося к одному и тому же исполняемому файлу.

Для различения экзмепляров сервиса используется пользовательский идентификатор (постфикс), который, при регистрации в системе, добавляется к основному имени сервиса.
Например:

  • RDS_SERVICE - имя экземпляра сервиса по умолчанию;
  • RDS_SERVICE_myname - имя экземпляра сервиса с пользовательским идентификатором.

Файлы конфигурации

Независимо от режима работы, программы сервисов хранят настройки ТОЛЬКО в папке SYSTEM в корневом каталоге системы Дигиспот.
В режиме "Инсталлятора" формат названия файла настроек полностью аналогичен файлам настроек других программ Дигиспот, т.е. имеет вид:

  • ИмяПрофиля.НазваниеПриложения.ini

Например:

Base.RDS_SERVICE.ini

В режимах "Конфигурации", "Сервиса" и "Приложения" к этому имени добавляется тег "service" и пользовательский идентификатор экземпляра:

  • ИмяПрофиля.service.НазваниеПриложения_ИдентификаторЭкземпляра.ini

Например:

Base.service.RDS_SERVICE_myname.ini

Файлы настройки системы событий

Файлы настройки системы событий, если они нужны, следует создавать для каждого из экземпляров сервиса отдельно, и названия этих файлов должны включать в себя пользовательский идентификатор (если он есть). Например:

RDS_SERVICE_myname.xml

Файлы лога

Путь, по которому создаются файлы лога программы теперь настраивается для каждого экземпляра сервиса индивидуально. Названия файлов также отражают режим работы программы и пользовательский идентификатор.
В режиме "Инсталлятора":

  • ИмяПриложения_Дата__Время.txt

Например:

rds_service_2013-09-20__16_48_41.txt

В режимах "Конфигурации", "Сервиса" и "Приложения":

  • service.ИмяПриложения_ПользовательскийИдентификатор_Дата__Время.txt
service.rds_service_myname_2013-09-20__17_04_08.txt

Режимы работы программы сервиса

Инсталлятор

Программа запускается в режиме инсталлятора по умолчанию (не нужно никаких дополнительных параметров командной строки).
В этом режиме открывается диалоговое окно, позволяющее, во-первых, создавать, удалять и настраивать сервисы в операционной системе, во-вторых, регистрировать экземпляры сервиса, работающие только в режиме эмуляции.

Вкладка "Сервис" позволяет создавать настоящие сервисы Windows и запускать их.
В списке "Сервис" выбирается экземпляр сервиса из списка установленных в системе.
Кнопка "Создать" создает и инсталлирует новый экземпляр сервиса. Программа запрашивает у пользователя идентификатор экземпляра. Если оставить строку идентификатора пустой, то будет создан экземпляр сервиса с названием по умолчанию. Если экземпляр был первоначально создан как эмулятор (см. ниже), то допускается пересоздать его как настоящий сервис, создав экземпляр с тем же именем на вкладке "Сервис". Сразу же после создания будет запущен конфигуратор для настройки нового сервиса.
Кнопка "Удалить" деинсталлирует существующий экземпляр сервиса.
В списке "Тип запуска" можно задать тип запуска сервиса (автоматический, ручной или запрет на запуск). Кнопка "Применить" сохраняет измененный тип запуска.

Вкладка "Эмулятор" позволяет создавать эмуляторы сервиса и запускать сервисы в режиме обычного приложения.
На вкладке "Эмулятор" в списке присутствуют как имена настоящих сервисов, так и созданные эмуляторы, последние отмечены как "[emulation]".
Кнопка "Создать" создает эмулятор сервиса, которая может быть запущена только как приложение.
Кнопка "Удалить" удаляет выбранный эмулятор.

В поле "Параметры запуска" отображается строка запуска сервиса, с указанием пути к исполняемому файлу и дополнительных параметров.
В поле "Состояние" указывается текущее состояние экземпляра сервиса. Если он работает, то дополнительно указывается, запущен ли он как настоящий сервис ("[service]") или как приложение ("emulation").
Кнопки "Старт" и "Стоп" соответственно запускают и останавливают экземпляр сервиса. Если активна вкладка "Сервис", то будет запущен настоящий сервис, если вкладка "Эмулятор" - то сервис как приложение.
Кнопка "Настройка" запускает сервис в режиме конфигурации. Одна и та же конфигурация используется сервисом в обоих рабочих режимах.

Конфигурация

Для запуска в этом режиме следует использовать параметр командной строки "/serviceconfig".
Работа в этом режиме целиком зависит от конкретной реализации, но предполагается, что программа должна открыть диалоговое окно с настройками сервиса.

Сервис

В этом режиме программа запускается и останавливается только через ту же программу в режиме Инсталлятора (со вкладки "Сервис") или из менеджера сервисов Windows.

Приложение (эмулятор сервиса)

Для запуска в этом режиме следует использовать параметр командной строки "/serviceapp".
Работа программы будет идентична работе сервиса, за тем исключением, что будет запущен не сервис, а приложение. Это удобно, прежде всего, для отладки.

Каждый запущенный экземпляр программы создает свою иконку в трее панели управления Windows. Название иконки соответствует названию экземпляра приложения (с пользовательским идентификатором). При щелчке правой кнопкой мыши по иконке появляется контекстное меню. Его содержимое может варьироваться, но по умолчанию имеются два пункта:

  • Панель управления: запускает ту же программу в режиме "Инсталлятора".
  • Завершить работу: завершить работу данного экземпляра приложения.

Старые версии сервисов

Версии сервисов, существовавшие до введения описанной здесь схемы работы, использовали другую строку запуска. Если в операционной системе уже зарегистрированы старые версии сервисов, то после обновления до новой версии сервисы запускаться не будут. В такой ситуации следует в режиме Инсталлятора сначала удалить старый сервис, затем инсталлировать новый.
Распознать старую версию сервиса можно по строке запуска: в старой версии в ней указан исполняемый файл программы сервиса с ключом "-service", а для нововй версии - путь к исполняемому файлу программы starter.exe, с ключами вида "$service=rds_service.exe $instance=RDS_SERVICE $postfix=".

Запись дампа и перезапуск сервиса в случае падения

Если в сервисе произошел сбой и он вынужден завершиться, то перед остановкой он пишет дамп в папку DMP. В сопутствущем дампу файле "*.ver" дополнительно указывается пользовательский идентификатор сервиса "Service instance".

Если сервис был запущен в режиме настоящего сервиса, то после падения он автоматически перезапускается в течение 5 секунд. Если произошло более 3 сбоев подряд, то при последующих падениях дампы более писаться не будут, вплоть до ручного перезапуска сервиса.

Параметры командной строки

Сервисы поддерживают следующие параметры командной строки:

  • /serviceconfig - запуск в режиме конфигурации экзмепляра сервиса;
  • /serviceapp - запуск в режиме приложения (эмуляция сервиса);
  • /install - инсталлирует сервис с указанным идентификатором экзмепляра, затем завершает приложение;
  • /uninstall - деинсталлирует сервис с указанным идентификатором экзмепляра, затем завершает приложение;
  • /instance=N - опциональный параметр, может быть применен вместе со всеми предыдущими ключами; указывает пользовательский идентификатор экземпляра сервиса.

Следующие параметры поддерживаются только в целях обратной совместимости, и пользоваться ими по возможности не надо:

  • -app- аналогично /serviceapp ;
  • -appstart- аналогично /serviceapp ;
  • -install- аналогично /install ;
  • -uninstall- аналогично /uninstall ;

Известные проблемы

1. Если запустить более одного Инсталлятора одного и того же сервиса, то их списки экземпляров сервисов синхронизированы не будут.
2. Если запустить два Инсталлятора, и в одном из них запустить "Настройку" сервиса, то в другом кнопки "Старт" и "Настройка" для этого сервиса станут неактивными, а кнопка "Стоп" активной, также, как и при запуске сервиса в рабочем режиме. Однако, нажатие на кнопку "Стоп" не приведет ни к каким последствиям.

Add picture from clipboard (Maximum size: 742 MB)