Точка входа службы
Службы обычно записываются как консольные приложения. Точка входа консольного приложения — это ее основная функция. Функция основной получает аргументы из значения 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 отправляет запросы управления в этот поток через именованный канал. Поток выступает в качестве диспетчера управления, выполняя следующие задачи:
- Создайте новый поток для вызова соответствующей точки входа при запуске новой службы.
- Вызовите соответствующую функцию обработчика для обработки запросов управления службами.
Связанные разделы