W jaki sposób można samemu zakończyć świadczenie usługi?Usługa samoobsługowa dla usługi C# dla systemu Windows
Environment.Exit spowoduje uruchomienie aplikacji, ale usługa pozostanie uruchomiona.
Każdy pomysł?
W jaki sposób można samemu zakończyć świadczenie usługi?Usługa samoobsługowa dla usługi C# dla systemu Windows
Environment.Exit spowoduje uruchomienie aplikacji, ale usługa pozostanie uruchomiona.
Każdy pomysł?
Można użyć SCM, aby wyłączyć usługę z poziomu serwisu samej:
System.ServiceProcess.ServiceController svc = new System.ServiceProcess.ServiceController("NameOfYourService");
svc.Stop();
Edit:
Inną opcją jest wywołanie ServiceBase.Stop()
w usłudze - jeśli masz dostęp do Twojej instancji klasy pochodnej ServiceBase
, która byłaby czystszą metodą przejścia - w wielu przypadkach jest to uciążliwe, chociaż trzeba przekazać tę zależność dookoła.
Jeśli masz niezaakceptowany wyjątek, osobiście po prostu pozwoliłbym awarię usługi (lub zalogować ją, a następnie throw
), co spowoduje pozostawienie wiadomości w dzienniku zdarzeń z wyszczególnieniem przyczyny zakończenia. Jeśli absolutnie potrzebujesz, możesz złapać wyjątek, a następnie zadzwonić pod numer ServiceBase.Stop()
.
Czy mogę użyć tego wewnątrz wyjątku poza klasą, która uruchamia usługę? –
@Mike: Zaktualizowano z dodatkowymi wyjaśnieniami - nie jestem pewien, czy rozumiem cię poprawnie w części "wewnątrz wyjątku" - czy możesz wyjaśnić? – BrokenGlass
cóż, mam próbę {} catch {}, która jest zamknięta wewnątrz {}. Problem polega na tym, że jeśli próba się nie powiedzie, potrzebuję zatrzymać tę całą usługę. Zadzwonię do serwisu, aby zatrzymać się na Service1.cs, potrzebuję, aby to się stało w innej klasie. –