2013-10-10 18 views
8

Czy wywołanie Environment.Exit z usługi systemu Windows powoduje, że SCM wywołuje metodę onStop() usługi, lub czy to zachowanie jest nieprzewidywalne?Wywołanie środowiska Environment.Exit w usłudze systemu Windows

Mam kilka usług Windows, które mają ten kod. Niestety, nie mogę usunąć tego zachowania. Ale muszę wiedzieć, czy onStop() zostanie wywołany, aby zdecydować, czy umieścić wspólny kod zatrzymujący w tej metodzie, czy w metodzie wywołującej Environment.Exit.

+0

możliwy duplikat [Czy serwis napisany w .NET własnym rozwiązać? ] (http://stackoverflow.com/questions/554276/can-a-service-written-in-net-self-terminate) – CodeCaster

Odpowiedz

11

Enviroment.Exit zamknie proces zawinięty przez usługę.

Dlatego wywołanie go nie wywoła metody onStop().

można wywołać metodę przez siebie zamiast dzwonić do Exit

Można użyć następującego kodu do wywoływania SCM stop

System.ServiceProcess.ServiceController svc = new System.ServiceProcess.ServiceController("NameOfYourService"); 
svc.Stop(); 
+0

Dzięki za szybką odpowiedź !! Więc tego zachowania należy się zawsze spodziewać, prawda? – Cygnus

+0

Oto czego szukasz: http://stackoverflow.com/a/554292/1361084 Jego odpowiedź Jona Skeets'a na komentarz @CodeCaster zamieszczony. – Ofiris

+0

Witam @Ofiris właśnie natknąłem się na ten wątek. po prostu zastanawiam się czy możemy zatrzymać winservice z dowolnej rutyny samej usługi wygrywania przy użyciu klasy ServiceController? czy potrzebuję osobnych aplikacji, które mogą zatrzymać moją usługę? proszę przypomnienie. dzięki – Thomas

Powiązane problemy