Поделиться через


Точка входа службы

Службы обычно записываются как консольные приложения. Точка входа консольного приложения — это ее основная функция. Функция основной получает аргументы из значения ImagePath из раздела реестра службы. Дополнительные сведения см. в разделе "Примечания" функции CreateService.

Когда SCM запускает программу службы, она ожидает вызова функции StartServiceCtrlDispatcher. Используйте следующие рекомендации.

  • Служба типа SERVICE_WIN32_OWN_PROCESS должна немедленно вызывать StartServiceCtrlDispatcher из основного потока. После запуска службы можно выполнить любую инициализацию, как описано в разделе ServiceMain Function.
  • Если тип службы SERVICE_WIN32_SHARE_PROCESS и существует общая инициализация для всех служб в программе, можно выполнить инициализацию в основном потоке перед вызовом StartServiceCtrlDispatcher, если это займет менее 30 секунд. В противном случае необходимо создать другой поток для выполнения обычной инициализации, а основной поток вызывает StartServiceCtrlDispatcher. После запуска службы необходимо выполнить любую инициализацию для конкретной службы.

Функция StartServiceCtrlDispatcher принимает структуру SERVICE_TABLE_ENTRY для каждой службы, содержащейся в процессе. Каждая структура указывает имя службы и точку входа для службы. Пример см. в статье Написание основной функции программы службы.

Если StartServiceCtrlDispatcher успешно, вызывающий поток не возвращается, пока все запущенные службы в процессе не вошли в состояние SERVICE_STOPPED. SCM отправляет запросы управления в этот поток через именованный канал. Поток выступает в качестве диспетчера управления, выполняя следующие задачи:

  • Создайте новый поток для вызова соответствующей точки входа при запуске новой службы.
  • Вызовите соответствующую функцию обработчика для обработки запросов управления службами.

написание основной функции программы службы