Мы автоматически запустили сервис, который в некоторых случаях тратит много времени на загрузку необходимых данных, скажем, 10 минут. В течение этого времени он работает как положено (обрабатывает некоторые огромные файлы данных, необходимые для запуска). Я сообщаю о прогрессе с помощью функции C ++ SetServiceStatus, она работает нормально.
Этот сервис не зависит ни от чего и имеет только одну зависимость, которая снова является нашим собственным сервисом. Он запускается по истечении этих 10 минут, и ему необходимо полностью запустить первую «серверную» службу для приема запросов.
Я думал, что Windows запустит все другие автоматические службы (менее чем через 10 минут, как обычно), а затем начнет работать нормально, но система полностью блокируется во время запуска (я не могу войти в компьютер или пинговать компьютер), пока эта конкретная служба не будет началось (сообщает SERVICE_RUNNING от SetServiceStatus). Когда наш сервис полностью запускается, другие запущенные системные сервисы (необходимые для сети, удаленного рабочего стола, что угодно, это довольно случайно) также запускаются. Это нормальное поведение? Почему независящие процессы (такие как удаленный рабочий стол, сетевые подключения и т. Д.) Ждут этого процесса? Я что-то пропустил?
Я пытался добавить некоторые зависимости, чтобы отложить запуск моей службы, но в результате у меня появилось много зависимостей и поведение, все еще как-то случайное (так как порядок служб случайный). Иногда я мог войти, но, например, кнопка «Пуск» начала работать только после тех 10 минут, когда мой сервис был запущен. Я не уверен, от чего зависит «последний сервис» и какие сервисы нужно включить в мой список зависимостей, а на некоторых компьютерах эти сервисы можно отключить, и это может вызвать новые проблемы … поэтому мне не нравится это решение очень сильно.
Другим вариантом был вариант отложенного запуска для нашего сервиса. Это должно запустить службу, когда все другие автоматические службы работают. Ну, это работает нормально, Windows загружается, компьютер работает и отвечает, наш сервис запущен, но производительность очень плохая, во много раз медленнее, чем обычно, кажется, что запущенные сервисы с задержкой имеют гораздо более низкий приоритет или что-то в этом роде.
Мое единственное текущее решение — сообщить системе о том, что мой сервис запущен (с помощью функции SetServiceStatus), но продолжить загрузку (это работает, я проверял это). Но тогда у нас возникают проблемы с нашим зависимым сервисом, так как он должен быть запущен, когда первый действительно готов. Это может быть решено, но я все еще задаюсь вопросом, как это возможно, и если есть что-то, что я мог бы использовать, чтобы сохранить текущее состояние службы автоматического запуска, которая сообщает, что «запускается», когда она действительно полностью запущена и готова к работе. Спасибо за любые идеи.
Установите SERVICE_RUNNING как можно скорее, а затем продолжите обработку в фоновом режиме. Сделайте ваш другой сервис устойчивым к первому сервису, который находится в рабочем состоянии, но еще не готов к работе.
Чем дольше сервис находится в начальном состоянии, тем больше проблем мы получаем от разных версий Windows.
Других решений пока нет …