Тайм-аут запуска службы Windows - PullRequest
51 голосов
/ 19 октября 2008

Есть ли способ установить другое значение для времени ожидания запуска службы для каждой службы? Я могу изменить его, используя раздел реестра ServicesPipeTimeout, но это для каждой машины (http://support.microsoft.com/kb/824344).

На данный момент я думал только о том, чтобы выполнить все трудоемкие действия при запуске в другом потоке.

Ответы [ 4 ]

79 голосов
/ 26 мая 2009

Я согласен с Ромуло в том, чтобы закончить, чтобы начать обслуживание как можно скорее. Однако, если вам нужно время и вы используете .NET Framework 2.0 или более позднюю версию, вы можете рассмотреть метод ServiceBase.RequestAdditionalTime ().

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.requestadditionaltime.aspx

protected override void OnStart()
{
    this.RequestAdditionalTime(10000);
    // do your stuff
}
36 голосов
/ 19 октября 2008

Хорошей практикой является завершение запуска вашего сервиса как можно быстрее. Итак, во время состояния start делайте только то, что вам абсолютно необходимо, чтобы подтвердить, что оно успешно запущено; а остальное сделаю позже. Если start все еще длительный процесс, периодически используйте SetServiceStatus , чтобы сообщить Service Control Manager , что вы еще не завершили, поэтому время ожидания не истекло ваш сервис.

4 голосов
/ 27 мая 2015

Просто делайте интенсивные вещи в другом потоке

   protected override void OnStart(string[] args)
    {
        var task = new Task(() =>
        {
            // Do stuff
        });
        base.OnStart(args);
        task.Start();
    }
1 голос
/ 02 октября 2014

Мне также пришлось иметь дело со службой, которая может занять несколько секунд / минут, чтобы иметь хороший старт. Когда служба запускается, она пытается подключиться к SQL Server. Однако, когда весь сервер был перезапущен, моя служба запускалась ДО SQL Server. (Я знаю о служебной зависимости, но она не применима к моей ситуации по определенной причине ....). Я пытался сделать цикл, пытаясь 10 раз соединиться с SQL Server, но Windows из-за тайм-аута убивала мой сервис до второй попытки.

Мое решение : я добавил таймер в "onStart ()" моего сервиса. Затем метод службы «onTick ()» 10 раз пытался подключиться к SQL Server (с ожиданием 30). Нет больше времени ожидания при запуске.

В общем,

  • Мой сервис запускается через 5 секунд.
  • Таймер запускается через 10 секунд после начало.
  • Таймер пытается 10 раз [каждый раз ждать 30 секунд] подключиться к SQL Server.
  • Если это удастся, таймер отключится сам, если нет (после 10 попыток), я остановлю службу.

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

...