-
Есть необходимость увеличить время ожидания ответа сервиса. Сервис может стартовать до двух минут, Windows ждет, как я понял, 30 секунд. Сервис не успевает полностью запуститься и начать отвечать на сообщения (есть необходимость в initialization выполнять медленную процедуру). Windows убивает сервис раньше, чем он успевает запуститься.
Не хотелось бы лезть в глобальные настройки Windows. Можно ли как-то увеличить время для конкретного сервиса?
-
Нашел вот такое:
1. Нажмите Пуск, Выполнить, наберите regedit и нажмите ОК
2. Перейдите в реестре к HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
3. Правой клавишей мыши щёлкните на параметре ServicesPipeTimeout и выберете Изменить. Если параметр отсутствует, то Вам нужно создать параметр ServicesPipeTimeout, тип DWORD Value
4. Введите в десятичном формате значение 60000 (по умолчанию 30000) - это тайм-аут запуска службы в миллисекундах. Нажмите ОК
есть какой-то другой вариант? Не хочу лезть в глобальные настройки.
-
> есть необходимость в initialization выполнять медленную процедуру
> есть какой-то другой вариант?
в initialization не выполняй медленную процедуру
-
-
Спасибо, посмотрю.
-
на SERVICE_START_PENDING выставляй нужное dwCheckPoint и dwWaitHint
-
> есть какой-то другой вариант?
вынести работу сервиса в свой поток, а основной поток сервиса оставить на общение с сервис менеджером.
-
> sniknik © (24.08.11 21:25) [6]
> вынести работу сервиса в свой поток, а основной поток сервиса
> оставить на общение с сервис менеджером.
а это кстати плохой подход, ибо вводит пользователя в заблуждение, сервис вроде как работает - но реально не работает...
-
> вводит пользователя в заблуждение
Причем пользователем могут быть зависимые службы.
-
> на SERVICE_START_PENDING выставляй нужное dwCheckPoint и
> dwWaitHint
Спасибо, судя по описанию то, что нужно, буду разбираться.
-
> Дмитрий Белькевич (24.08.11 22:07) [9]
Сервис не VCL? VCL сервис сам SERVICE_START_PENDING отрабатывает правильно. Есть ли смысл городить самопальную реализацию?
-
VCL. Только всё хуже. Основная задержка на старте находится в секции initialization одного из модулей. То есть еще до создания TService.