Ho due servizi Windows scritti in C# seguendo gli stessi schemi e la stessa metodologia.Strano problema con un servizio Windows .NET
Entrambi i servizi sono stati testati per lo sviluppo rispetto a un VM Windows 7 e al QA testati su Windows Server 2008 VM. Entrambi i servizi sono stati installati e disinstallati molte volte in questi ambienti di test senza problemi, tuttavia durante l'installazione nell'ambiente di produzione (Windows Server 2008) uno dei due servizi si rifiuta di avviarsi.
Per installare i servizi si utilizza InstallUtil.exe con i componenti ServiceInstaller e ServiceProcessInstaller collegati al servizio.
In tutte le apparenze, il servizio in errore viene installato correttamente. InstallUtil.exe segnala il successo e il servizio viene visualizzato nello snap-in Servizi. È inoltre possibile individuare il servizio nel registro in HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Blah Blah. Tuttavia, se si tenta di avviare il servizio si ottiene quanto segue:
net start blah.blah.exe "Il nome del servizio non è valido."
... o passare attraverso lo snap-in Servizi ... "Impossibile avviare il servizio 'Blah Blah' sul computer locale Errore 1053:. Il servizio non ha risposto alla richiesta di avvio o controllo in modo tempestivo ".
Ho aggiunto qualche registrazione degli eventi al costruttore del servizio in errore della classe di servizio, ma non sembra essere richiamato.
Poiché questa è una casella di produzione, non è presente Visual Studio sulla scatola e il debug remoto è fuori questione.
C'è qualche altro modo per ottenere informazioni di debug sul motivo per cui il servizio in errore non viene avviato?
C'è qualche altra ovvia ragione per cui potrei vedere questo tipo di problema?
Edit: avrei anche detto .. L'unica altra evidenza di un problema nel Visualizzatore eventi di Windows è di due messaggi nel Registro di sistema dal Service Control Manager:
"è stato raggiunto un timeout (30000 millisecondi) in attesa che il Blah Blah servizio per connettersi
"la Blah Blah di servizio non è stato avviato per il seguente errore: il servizio non ha risposto alla richiesta di avvio o controllo in modo tempestivo.".
Modifica: risolto Il problema si è rivelato una combinazione di un errore di configurazione e un bug che lo nascondeva. Vedere il mio answer sotto per maggiori dettagli.
La versione corretta di .NET è installata nel sistema di produzione? –
@Matt Sì, questo .NET 3.5 e si trova sulla scatola di produzione. –
Solo uno scatto al buio: controlla il metodo Main, per impostazione predefinita nel file Program.cs. Hai detto che hai aggiunto la registrazione al costruttore della classe di servizio, ma non sembra essere stato chiamato. Aggiungerei la registrazione all'inizio del metodo Main per verificare se anche quello viene chiamato. Forse è stato aggiunto un codice di inizializzazione e non sta funzionando correttamente nell'ambiente di produzione. –