Какой тайм-аут для запуска службы Windows?

Я развернул свою службу Windows (используя независимый класс установщика и SC.EXE), но при попытке ее запуска получаю сообщение об ошибке:

---------------------------
Services
---------------------------
Could not start the MyName service on Local Computer.



Error 1053: The service did not respond to the start or control request in a timely fashion.

Какой тайм-аут? Было примерно 3 секунды. Что мне делать, если мое обслуживание занимает больше времени?


person Grzenio    schedule 21.07.2009    source источник


Ответы (4)


В своем классе обслуживания используйте ServiceBase.RequestAdditionalTime() в своем методе OnStart / OnStop:

// request an additional 4 seconds to complete the operation
RequestAdditionalTime(4000);  
person Ben M    schedule 21.07.2009
comment
Это очень полезно. Спасибо. - person Jirapong; 11.07.2012

Обычный способ создания службы состоит в том, чтобы код запуска создавал новый поток и запускал вашу службу в этом потоке.

Запуск службы должен быть почти мгновенным - не что иное, как создание нового потока с вашей «реальной» работой в нем.

Если вы тратите больше трех секунд, это признак того, что вы выполняете реальную работу в своем основном потоке, а не создаете отдельный поток для своей службы.

person Reed Copsey    schedule 21.07.2009
comment
Это предполагает плохой дизайн там, где он может отсутствовать. Сложная инициализация может занять дополнительное время, а сообщение об отсутствии ответа предупреждает пользователей о неудачном запуске. Если сбой произошел в потоке и в результате служба остановилась, единственное видимое свидетельство (без отдельного пользовательского интерфейса мониторинга) будет в журнале событий. - person Ben M; 21.07.2009
comment
Существует причина, по которой ограничение по времени для запуска составляет 3 секунды. Есть способы расширить это (RequestAdditionalTime ()), но рекомендуется, чтобы службы запускались быстро и / или помещали работу в отдельный поток и предупреждали другим способом. Долгое время для запуска помешает быстрому запуску других сервисов, что ЯВЛЯЕТСЯ плохим дизайном, ИМО. - person Reed Copsey; 21.07.2009
comment
Этот дизайн немного странный - почему я должен притворяться, что моя служба запускается через 3 секунды, если на самом деле он дает сбой на 4-й секунде? - person Grzenio; 22.07.2009
comment
У меня не было бы проблем с запросом 4 секунд для запуска, но у меня была бы проблема с сервисом, который запрашивал 3 минуты для запуска. Я бы удалил это программное обеспечение, так как это значительно сократит время запуска системы ... - person Reed Copsey; 22.07.2009

Что касается конкретного вопроса, то точное время ожидания варьируется, но составляет менее 30 секунд. Вы можете управлять тайм-аутом запуска по умолчанию для службы с помощью раздела реестра, вы можете увидеть, как это сделать, здесь < / а>.

Однако я соглашусь со многими другими, что я бы рассмотрел два возможных варианта.

  1. Запустите службу как можно скорее, создайте поток и т. Д.
  2. Если вы не можете выбрать один вариант, вы можете использовать RequestAdditionalTime (). Только не забудьте позвонить пораньше.
person Mitchel Sellers    schedule 21.07.2009

Также, если вы тестировали службу в разных физических средах, и кажется, что проблема не в нормальном времени запуска, а в производительности ПК. Вы можете увеличить время ожидания для раздела реестра для конкретного компьютера.

См.: http://support.microsoft.com/kb/839803

С Уважением

person wacdany    schedule 10.10.2011