Jestem całkiem nowy w usługach Windows. Stworzyłem instalator dla mojej usługi C# Windows i wygląda na to, że instalacja na serwerze (Windows Server 2003) zadziałała. Po uruchomieniu zapisuje Service started successfully
w dzienniku. Po zatrzymaniu pisze Service stopped successfully
. Jednak czasami usługa przestaje działać bez zapisywania czegokolwiek w dzienniku, więc uruchamiam ją ręcznie. Kiedy patrzę na dziennik po nim, to zgodnie z oczekiwaniami mówi Service started successfully
. To dziwne, widząc, że w dzienniku dwa razy z rzędu jest oczywiste, że brakuje wpisu, w którym usługa przestała działać.Dlaczego moja usługa C# Windows przestaje działać bez zapisywania jakichkolwiek komunikatów w dzienniku zdarzeń aplikacji?
Jakie mogą być tego potencjalne przyczyny? Mam usługę skonfigurowaną jako automatyczną i zainstalowałem ją tak, aby działała dla wszystkich użytkowników. Miałem wrażenie, że oznacza to, że usługa uruchamia się automatycznie po każdym uruchomieniu komputera. Jak mogę się dowiedzieć, dlaczego to się zatrzymało? Czy usługi, które powodują awarię, automatycznie zapisują w dzienniku zdarzeń, czy też muszę obsługiwać wyjątki w taki sposób, aby rejestrować własny powód awarii?
Edit: Niektóre dodatkowe info:
- mam go skonfigurować, aby zalogować się jako lokalne konto systemowe
- Pod opcji odzyskiwania, mam go skonfigurować, aby ponownie na pierwszym niepowodzeniu. Nie mam nic do drugiej lub następnej awarii.
Aktualizacja: Program odpowiadający zalecił obsługę wyjątku globalnego. Chociaż nie będę go wprowadzał jako stałej poprawki, przynajmniej pomoże mi to ustalić, gdzie występuje problem. Właściwie to przetestowałem z moją zainstalowaną usługą i to działa. Dowiedziałem się, że nieobsługiwane wyjątki faktycznie powodują awarię usługi bez zapisywania czegokolwiek w dzienniku. Pomyślałem, że przynajmniej zgłosi jakiś błąd aplikacji, ale tak nie jest.
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
//other code here
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Utilities.WriteIt(e.ExceptionObject as Exception);
}
Czy sprawdziłeś dziennik zdarzeń? – pms1969