Używam parsera dziennika Microsoft w usłudze systemu Windows. Program działa na zwykłej stronie internetowej, ale kiedy umieściłem kod w usłudze windows, to nie działa. Umieszczam Breakponts w usłudze Windows, ale kiedy uruchamiam kod, program nie zatrzymuje się w punkcie przerwania. Więc przez moje rozwiązywanie problemów zawęziłem problem do oprogramowania Log Parser i Linq. Tak więc albo Linq, albo oprogramowanie parsera dziennika tworzy problem. Czy macie jakiś pomysł?Jaki jest najlepszy sposób debugowania programu usługi systemu Windows w programie Visual Studio 2008
Odpowiedz
Zrobiłem tak wiele sposobów w przeszłości w zależności od sposobu działania programu. Myślę, że najłatwiej jest zrobić z instrukcją preprocesora #DEBUG wokół Debugger.Launch() w ten sposób, gdy zbudujesz projekt zoptymalizowany, wywołanie Debugger.Launch() nie zostanie skompilowane w zespole.
Jednym ze sposobów wykonania tego zadania jest także System.Windows.Forms.MessageBox.Show ("attach"), który umożliwił nam ręczne dołączenie do debugera za każdym razem, gdy wyświetlane jest okno dialogowe "attach".
Ostatnim sposobem, który nie preferuję, jest zmiana zachowania usługi na podstawie przekazanych parametrów linii poleceń. Zasadniczo rezygnacja z uruchamiania usług przy użyciu ServiceBase.Run, gdy dany parametr został uruchomiony, ale wywołanie klasy która zawiera zachowanie/główną funkcję usługi.
Musisz podłączyć swój debugger bezpośrednio do usług Windows. Może to pomóc: http://msdn.microsoft.com/en-us/library/7a50syb3%28VS.80%29.aspx.
Czy chcesz debugować metodę OnStart? Jeśli tak, możesz użyć metody System.Diagnostics.Debugger.Launch()
lub System.Diagnostics.Debugger.Break()
, aby uzyskać szansę na dołączenie debuggera, gdy działa metoda uruchomienia, w przeciwnym razie zawsze będziesz spóźniał z dołączaniem debuggera.
Myślę, że sugestia tłustego kota o dołączeniu debuggera do procesu obsługi brzmi dobrze. Jeśli to nadal nie działa, spróbuj użyć Debug.WriteLine i DebugView.
Ponownie ostatni punkt - Wierzę, że można również sprawdzić "Environment.UserInteractive". –