тайм-аут запуска службы Windows
-
03-07-2019 - |
Вопрос
Есть ли способ установить другое значение для времени ожидания запуска службы для каждой службы?Я могу изменить его, используя раздел реестра ServicesPipeTimeout, но это зависит от компьютера (http://support.microsoft.com/kb/824344).
На данный момент единственное, о чем я думал, - это выполнить все трудоемкие действия при запуске в другом потоке.
Решение
Рекомендуется закончить запуск службы как можно быстрее. Таким образом, в состоянии start делайте только то, что вам абсолютно необходимо, чтобы подтвердить, что оно успешно запущено; а остальное сделаю позже. Если start все еще длительный процесс, используйте SetServiceStatus периодически информировать Диспетчер управления службами о том, что вы еще не закончили, чтобы он не превышал время ожидания вашей службы.
Другие советы
Я согласен с Ромуло в том, чтобы закончить запуск вашего сервиса как можно скорее. Однако, если вам нужно время и вы используете .NET Framework 2.0 или более позднюю версию, вы можете рассмотреть метод ServiceBase.RequestAdditionalTime ().
protected override void OnStart()
{
this.RequestAdditionalTime(10000);
// do your stuff
}
Просто делайте интенсивные вещи в другом потоке
protected override void OnStart(string[] args)
{
var task = new Task(() =>
{
// Do stuff
});
base.OnStart(args);
task.Start();
}
Мне также приходилось иметь дело с сервисом, для хорошего запуска которого может потребоваться несколько секунд / минут.Когда служба запускается, она пытается подключиться к SQL-серверу.Однако, когда весь сервер был перезапущен, моя служба запускалась РАНЬШЕ SQL Server.(Я знаю о зависимости сервиса, но это не применимо к моей ситуации по определенной причине ....).Я попытался выполнить цикл, пытаясь 10 раз подключиться к SQL Server, но Windows отключала мою службу до 2-й попытки из-за тайм-аута.
Мое решение :Я добавил Таймер в "OnStart()" моего сервиса.Затем метод службы "OnTick()" 10 раз пытался подключиться к SQL-серверу (с ожиданием в 30 минут).Больше нет тайм-аута при запуске.
Так что в основном,
- Мой сервис запускается через 5 секунд.
- Таймер запускается через 10 секунд после запуска службы .
- Таймер пытается выполнить 10 попыток [каждый раз ожидая по 30 секунд] для подключения к SQL Server.
- Если это удастся, таймер отключится сам, если нет (после 10 попыток), я останавливаю службу.
Обратите внимание на более элегантный способ решения проблемы, но, возможно, какая-то часть моего решения может помочь кому-нибудь в такой же ситуации, кроме меня,