2010-09-15 18 views
12

Il servizio di avvio automatico di Windows non viene avviato solo al riavvio. Ho un servizio Windows creato in C# e installato tramite un programma di installazione creato da Wix. Il servizio è impostato per l'avvio automatico. Il servizio è installato ed eseguito nel NT AUTHORITY \ NETWORK SERVICE. All'avvio del servizio, effettua prima una chiamata di servizi Web esterni.Il servizio Windows non si avvierà automaticamente dopo il riavvio

In Windows 7 posso impostare il servizio su Automatico - Avvio ritardato e il servizio verrà avviato al riavvio senza problemi. Tuttavia, questa opzione non è disponibile in Windows XP, e quando è impostato su avvio automatico, il servizio non riesce a causa di

A timeout was reached (30000 milliseconds) while waiting for the MyService service to connect.

Se provo ad avviare manualmente dopo il processo di login, il servizio inizia bene, è solo quando il servizio tenta di avviarsi automaticamente al riavvio che c'è un problema, mi porta a credere che ci siano servizi di dipendenza che devo aggiungere al mio servizio perché possa avviarsi correttamente.

Qualcuno può indicarmi le dipendenze corrette o un approccio alternativo?

risposta

11

Probabilmente hai una condizione di competizione con una dipendenza. Probabilmente potresti aggirarlo configurando il tuo servizio per avere una dipendenza da un altro servizio (ad esempio tcp/ip) ma quello che farei davvero è riscrivere il tuo servizio per non aver bisogno di effettuare questa chiamata durante il percorso critico di avvio. Dovrebbe invece tentare periodicamente di effettuare la chiamata al servizio Web in un secondo momento e registrare messaggi utili o inviare messaggi a un'utilità della barra delle applicazioni o simili se c'è un problema che deve essere risolto.

+0

Ho pensato di fare entrambe le cose. Il problema è che viene effettuata la chiamata per recuperare le impostazioni di configurazione remota e in quanto tale è integrato nelle Impostazioni come un'estensione di SettingsProvider. –

+1

Ci scusiamo, ma è necessario. Il design di base è al massimo fragile. Il Web è senza stato e assumere che sia tutto il resto è sbagliato. –

+1

Ho seguito il tuo consiglio e ho fatto in modo che il mio metodo OnStart() eseguisse la minima funzionalità e avvii un timer che viene eseguito in un secondo momento per abbattere le impostazioni di configurazione e inizializzare la funzionalità del servizio. –

0

Ho avuto lo stesso problema su 4 nuovi server. Ho impostato il servizio W32 per ritardare automaticamente e ha risolto il problema.

Problemi correlati