2011-07-31 17 views

Odpowiedz

14

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().

+0

Czy mogę użyć tego wewnątrz wyjątku poza klasą, która uruchamia usługę? –

+0

@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

+0

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. –

Powiązane problemy