| Предыдущий | Следующий |
| ERROR_SERVICE_REQUEST_TIMEOUT | ERROR_SERVICE_DATABASE_LOCKED |
ERROR_SERVICE_NO_THREAD
Служба не смогла получить поток выполнения ServiceMain
Когда SCM запускает службу в процессе службы, диспетчер управления службами создаёт новый поток для выполнения обратного вызова ServiceMain этой службы. ERROR_SERVICE_NO_THREAD указывает на невозможность создать такой поток ещё до завершения обычной инициализации ServiceMain.
Отличайте это от ситуации, когда функция ServiceMain запускается и затем сообщает прикладную ошибку. Проверьте общепроцессное давление на потоки и память, ограничения job-объекта или безопасности и сбои процесса, в котором размещена служба. Особого внимания требуют службы в общем процессе: исчерпание потоков или повреждение хоста может затронуть несколько служб. Зафиксируйте идентичность процесса-хоста и другие размещённые в нём службы, затем сопоставьте сбой с событиями исчерпания ресурсов или отказа процесса. Перезапуск одной службы может не восстановить повреждённый общий хост.
Что проверить
- Определите процесс-хост службы и все службы, совместно использующие этот процесс.
- Проверьте состояние потоков, памяти, job-объектов и ошибки процесса в момент запуска.
- Отличайте ошибку создания потока диспетчером от кода, уже выполняющегося внутри ServiceMain.
Ссылки
- Microsoft: LPSERVICE_MAIN_FUNCTION
- Microsoft: StartServiceCtrlDispatcherW
- Microsoft: диспетчер управления службами
Нужно найти другой код? Найти другой код состояния или ошибки.
