Время ожидания запуска службы Windows
Есть ли способ установить другое значение для тайм-аута запуска службы для каждой службы?
Я могу изменить его, используя ключ реестра ServicePipeTimeout, но он на машину (http://support.microsoft.com/kb/824344).
В настоящий момент единственное, о чем я думал, это сделать все трудоемкие действия запуска в другом потоке.
Ответы
Ответ 1
Хорошая практика - как можно быстрее завершить свое обслуживание. Таким образом, во время состояния начала делайте только то, что вам абсолютно необходимо, чтобы признать, что оно началось успешно; и сделайте остальные позже. Если запуск по-прежнему длительный, используйте SetServiceStatus, чтобы сообщить диспетчеру управления службами, что вы еще не закончили, из вашей службы.
Ответ 2
Я согласен с Ромуло в завершении, чтобы начать ваше обслуживание как можно скорее. Однако, если вам нужно время, и вы используете .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
}
Ответ 3
Просто делайте время в другом потоке
protected override void OnStart(string[] args)
{
var task = new Task(() =>
{
// Do stuff
});
base.OnStart(args);
task.Start();
}
Ответ 4
Мне также пришлось иметь дело с услугой, которая может занять несколько секунд/минут, чтобы иметь хороший старт. Когда служба запускается, она пытается подключиться к SQL Server. Однако, когда весь сервер был перезапущен, моя служба запускалась до SQL Server. (Я знаю о зависимостях службы, но это не относится к моей ситуации по определенной причине....). Я пытался сделать цикл, пытающийся 10 раз подключиться к SQL Server, но Windows убивала мою службу до второй попытки из-за таймаута.
Мое решение. Я добавил таймер в "onStart()" моей службы. Затем метод "onTick()" службы пытался 10 раз подключиться к SQL Server (с ожиданием 30 в нем). Больше нет времени ожидания при запуске.
Итак, в основном,
- Моя услуга начинается через 5 секунд.
- Таймер запускается через 10 секунд после того, как служба
начало.
- Таймер пробует 10 раз [ожидание 30 секунд каждый раз] до
подключитесь к SQL Server.
- Если это произойдет, таймер отключит себя, если нет (после 10 попыток), я остановлю службу.
Обратите внимание на более элегантный способ решения проблемы, но, возможно, какая-то часть моего решения может помочь кому-либо в той же ситуации, что и я,