Вопрос

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

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

Это было полезно?

Решение

Рекомендуется закончить запуск службы как можно быстрее. Таким образом, в состоянии start делайте только то, что вам абсолютно необходимо, чтобы подтвердить, что оно успешно запущено; а остальное сделаю позже. Если start все еще длительный процесс, используйте SetServiceStatus периодически информировать Диспетчер управления службами о том, что вы еще не закончили, чтобы он не превышал время ожидания вашей службы.

Другие советы

Я согласен с Ромуло в том, чтобы закончить запуск вашего сервиса как можно скорее. Однако, если вам нужно время и вы используете .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
}

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

   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 попыток), я останавливаю службу.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top