Sto utilizzando il parser di registro Microsoft in un servizio di Windows. Il programma funziona in una normale pagina Web ma quando inserisco il codice in un servizio Windows non funziona. Metto Breakponts nel servizio di Windows, ma quando eseguo il codice il programma non si ferma al punto di interruzione. Quindi attraverso la mia risoluzione dei problemi ho ridotto il problema al software Log Parser e Linq. Quindi, Linq o il software del parser di registro sta creando il problema. Ragazzi, avete qualche idea?Qual è il modo migliore per eseguire il debug di un programma di servizio di Windows in Visual Studio 2008
risposta
Ho fatto questo in molti modi in passato a seconda di come il programma viene eseguito. Penso che il modo più semplice sia fatto con una direttiva del preprocessore #DEBUG attorno al Debugger.Launch() in quel modo quando hai costruito il progetto ottimizzato, la chiamata Debugger.Launch() non verrà compilata nell'assembly.
Un modo in cui abbiamo anche svolto questa attività è con System.Windows.Forms.MessageBox.Show ("attach") che ci ha permesso di collegarsi manualmente al debugger ogni volta che veniva visualizzata la finestra di dialogo "Allega".
L'ultimo modo che io non preferisco è quello di cambiare il comportamento del servizio sulla base params riga di comando passati in. In pratica scegliendo di non avviare i servizi utilizzando ServiceBase.Run ogni volta che un particolare parametro è stato sparato, ma chiamare una classe che incapsula il comportamento/funzione principale del servizio.
È necessario collegare il debugger direttamente a Servizi Windows. Questo potrebbe aiutarti: http://msdn.microsoft.com/en-us/library/7a50syb3%28VS.80%29.aspx.
Vuoi eseguire il debug del metodo OnStart? In tal caso, è possibile utilizzare il metodo System.Diagnostics.Debugger.Launch()
o System.Diagnostics.Debugger.Break()
per ottenere la possibilità di collegare il debugger mentre il metodo on start è in esecuzione, altrimenti si è sempre in ritardo con il collegamento del debugger.
Penso che il suggerimento del gatto grasso di collegare il debugger al processo di servizio sia corretto. Se ancora non funziona, prova a utilizzare Debug.WriteLine e DebugView.
Re l'ultimo punto: credo che si possa anche controllare 'Environment.UserInteractive' per questo. –