timeout di avvio del servizio Windows

C’è un modo per impostare un valore diverso per il timeout di avvio del servizio per servizio? Posso cambiarlo usando la chiave di registro ServicesPipeTimeout, ma è per macchina ( http://support.microsoft.com/kb/824344 ).

Al momento l’unica cosa a cui pensavo era di fare tutte le azioni di avvio che richiedono tempo in un thread diverso.

È buona norma terminare l’avvio del servizio il più velocemente ansible. Quindi, durante lo stato di avvio , fare solo ciò che è assolutamente necessario per riconoscere che è stato avviato correttamente; e fai il resto dopo. Se l’ avvio è ancora un processo lungo, utilizzare SetServiceStatus periodicamente per informare la Gestione controllo servizi che non si è ancora completato, in modo che non interrompa il servizio.

Sono d’accordo con Romulo sul finire di iniziare il tuo servizio il prima ansible. Tuttavia, se è necessario il tempo e si utilizza .NET Framework 2.0 o versioni successive, è ansible considerare il metodo ServiceBase.RequestAdditionalTime ().

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

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

Basta fare roba timeintensive in un altro thread

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

Ho anche dovuto occuparmi di un servizio che potrebbe richiedere alcuni secondi / minuti per avere un buon inizio. All’avvio del servizio, tenta di connettersi a un server SQL. Tuttavia, quando l’intero server è stato riavviato, il mio servizio è stato avviato PRIMA di SQL Server. (Conosco la dipendenza dal servizio ma non si applica alla mia situazione per un motivo particolare …). Ho provato a fare un ciclo cercando 10 volte di connettersi a SQL Server, ma Windows stava uccidendo il mio servizio prima del 2 ° tentativo, a causa del Timeout.

La mia soluzione : ho aggiunto un timer nel “onStart ()” del mio servizio. Quindi, il metodo “onTick ()” del servizio stava tentando 10 volte di connettersi a SQL Server (con un’attesa di 30 in esso). Non più Timeout all’avvio.

Quindi in poche parole,

  • Il mio servizio inizia tra 5 secondi.
  • Un timer viene avviato 10 secondi dopo l’avvio del servizio.
  • Il timer tenta 10 volte [in attesa di 30 secondi ogni volta] per connettersi a SQL Server.
  • Se riesce, il timer si disabiliterà da solo, in caso contrario (dopo 10 tentativi), interromperò il servizio.

Nota il modo più elegante per risolvere il problema ma forse una parte della mia soluzione può aiutare chiunque nella stessa situazione di me,