tempo limite de boot do serviço do Windows

Existe uma maneira de definir um valor diferente para o tempo limite de boot do serviço por serviço? Eu posso alterá-lo usando a chave de registro ServicesPipeTimeout, mas é por máquina ( http://support.microsoft.com/kb/824344 ).

No momento, a única coisa em que pensei foi fazer todas as ações de boot demoradas em um segmento diferente.

É uma boa prática terminar de iniciar seu serviço o mais rápido possível. Portanto, durante o estado inicial , faça apenas o que você precisa para confirmar que ele foi iniciado com êxito; e faça o resto depois. Se o início ainda for um processo demorado, use SetServiceStatus periodicamente para informar o Service Control Manager que você ainda não concluiu, para que ele não exceda o tempo limite de seu serviço.

Eu concordo com Romulo em terminar de começar seu serviço o mais rápido possível. No entanto, se você precisar de tempo e estiver usando o .NET Framework 2.0 ou posterior, considere o método ServiceBase.RequestAdditionalTime ().

http://msdn.microsoft.com/pt-br/library/system.serviceprocess.servicebase.requestadditionaltime.aspx

protected override void OnStart() { this.RequestAdditionalTime(10000); // do your stuff } 

Basta fazer coisas com tempo em outro tópico

  protected override void OnStart(string[] args) { var task = new Task(() => { // Do stuff }); base.OnStart(args); task.Start(); } 

Eu também tive que lidar com um serviço que pode levar alguns segundos / minutos para ter um bom começo. Quando o serviço é iniciado, ele tenta se conectar a um SQL Server. No entanto, quando todo o servidor foi reiniciado, meu serviço foi iniciado antes do SQL Server. (Eu sei sobre a dependência do serviço, mas não se aplica à minha situação por um motivo particular ….). Eu tentei fazer um loop tentando 10 vezes para se conectar ao SQL Server, mas o Windows estava matando o meu serviço antes da segunda tentativa, por causa do tempo limite.

Minha solução : adicionei um Timer no “onStart ()” do meu serviço. Em seguida, o método “onTick ()” do serviço tentava 10 vezes conectar-se ao SQL Server (com uma espera de 30). Não há mais tempo limite na boot.

Então, basicamente,

  • Meu serviço começa em 5 segundos.
  • Um cronômetro é iniciado 10 segundos após o início do serviço.
  • O timer tenta 10 vezes [esperar 30 segundos de cada vez] para se conectar ao SQL Server.
  • Se for bem sucedido, o timer será desativado, se não (após 10 tentativas), paro o serviço.

Observe a maneira mais elegante de resolver o problema, mas talvez parte da minha solução possa ajudar alguém na mesma situação que eu,