Event ID 7022: Служба зависла при запуске (Service hung on startup)
Архитектура старта служб и зависания (Deadlock)
Событие 7022 логируется в журнале System источником Service Control Manager (SCM). Сообщение гласит: «Служба [ИмяСлужбы] зависла при запуске (hung on startup)». Это одно из самых неприятных событий при загрузке (Boot) Windows Server.
В отличие от >7009 (Таймаут подключения), где служба просто не успела загрузиться за 30 секунд, событие 7022 означает глубокое программное зависание (Deadlock) процесса. Служба отрапортовала ядру "Я запускаюсь..." и застряла навсегда. Симптомы: сервер грузится бесконечно долго (висит на экране 'Применение параметров компьютера'), а после входа оснастка services.msc показывает, что служба зависла в сером статусе «Запуск... (Starting)».
Частые виновники 7022
- NlaSvc (Network Location Awareness): Зависает в ожидании ответа от DNS или AD.
- WsusService: Повреждение базы WID.
- Antivirus / EDR Agents: Блокировка чтения системных файлов при старте ОС.
Пошаговое дерево решений (Разблокировка загрузки)
Сценарий 1: Убийство зависшего процесса (Hard Kill)
Если служба зависла в статусе "Запуск...", вы не сможете нажать кнопку "Остановить" (она серая). Вам нужно жестко убить процесс на уровне ядра.
- Откройте командную строку (CMD) от имени Администратора.
- Узнайте PID зависшей службы (например, WsusService):
sc queryex WsusService - Найдите в выводе строку
PID : 4052(цифры будут другие). - Убейте процесс (Force Kill):
taskkill /PID 4052 /F
Служба перейдет в статус "Остановлена", и вы сможете разбираться с ее логами или базой данных без перезагрузки всего сервера.
Сценарий 2: Перевод в Отложенный запуск (Delayed Start)
Если служба (например, 1С Сервер или SQL) пытается стартовать до того, как сетевые интерфейсы получили IP-адреса, она зависнет. Переведите Тип запуска (Startup Type) в Автоматически (Отложенный запуск). Это даст ОС время на инициализацию всей инфраструктуры (сеть, диски), а проблемная служба запустится через 2 минуты после старта.
Сценарий 3: Анализ блокировок файлов (ProcMon)
Если 7022 не уходит, значит процесс блокируется сторонним софтом.
- Скачайте Process Monitor (Sysinternals). Включите опцию Enable Boot Logging. Перезагрузите сервер.
- После загрузки откройте лог и найдите
.exeфайл вашей службы. - Ищите результаты
SHARING_VIOLATION. Вы увидите, что антивирус (например,avp.exe) заблокировал файл конфигурации службы, из-за чего она ушла в вечный таймаут. Добавьте пути службы в Exclusions.
Типовые ошибки администраторов
- Увеличение ServicesPipeTimeout: Увеличение системного таймаута в реестре (как это делают при 7009) здесь не поможет! Служба УЖЕ в состоянии Deadlock, она не "медленно грузится", она намертво висит. Увеличение таймаута только заставит ваш сервер висеть на экране загрузки не 1 минуту, а 5 минут.
Зависающие сервисы (Deadlocks) — индикатор глубоких программных конфликтов ОС или деградации СХД. Возьмем серверы на абонентское обслуживание: проведем анализ загрузки (Windows Performance Analyzer), вычистим кривые драйверы, оптимизируем базы данных и восстановим мгновенную загрузку (Boot Time).
Частые вопросы (FAQ)
Почему 7022 появляется после установки обновлений Windows (WSUS)?
Обновления (TiWorker / TrustedInstaller) могут блокировать кусты реестра или системные DLL для их замены при старте. Если ваша служба пытается прочитать заблокированный куст HKLM, она 'виснет' в ожидании (Lock Wait). Обычно лечится просто второй перезагрузкой сервера.
Что означает статус 'Stopping' (Остановка...)?
То же самое, что и 'Starting'. Процесс завис на этапе выгрузки из памяти (часто из-за того, что не может закрыть сетевой сокет или сбросить кэш на диск). Лечится так же — через 'sc queryex' и 'taskkill /F'.
Может ли сбой DNS вызвать 7022?
Да. Если служба (например, Exchange IS) в момент старта пытается разрешить имя контроллера домена, а сеть недоступна, DNS-запрос уйдет в таймаут (который может длиться минуты), блокируя старт самой службы.
Поможет ли переустановка зависшего софта?
Если бинарный файл поврежден или несовместим с версией .NET Framework (для C# служб), переустановка полностью решит проблему. Всегда проверяйте журнал Application на наличие ошибок .NET Runtime в момент старта.
Как запустить службу в безопасном режиме (Safe Mode)?
По умолчанию Windows блокирует старт несистемных служб в Safe Mode. Если вам нужно запустить зависающую службу для диагностики, используйте ключ реестра 'HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network' и создайте там раздел с именем службы.