70-536 Tworzenie Windows Services

Poniższy artykuł pochodzi z serii Przygotowań do egzaminu 70-536.

Dzisiaj króciutki rozdział o usługach windows. Windows Service jest procesem uruchomionym w tle bez interfejsu i we własnej sesji użytkownika. Usługa może być uruchomiona automatycznie, podczas startu komputera, nawet bez zalogowania użytkownika. Sam windows ma kilkadziesiąt usług np. Workstation, World Wide Web Publishing. 

Usługi windows funkcjonują inaczej niż inne typu projektów.

  • Skompilowany plik wykonywalny usług musi być zainstalowany przed instalacją projektu aby mógł on funkcjonować w sensowny sposób. Nie możemy debugować ani uruchamiać usług poprzez wciśnięcie F5 czy F11. Należy taką usługę zainstalować, uruchomić a następnie skorzystać z debugera procesów. Jeśli używamy WCF możemy w Visual Studio uruchomić debugera usług. Po więcej informacji odsyłam do http://msdn.microsoft.com/en-us/library/bb552361.aspx.
  • W przeciwieństwie do innych typów projektów musimy stworzyć składniki instalacji dla services applications. Następnie zainstalować je, zarejestrować usługę na serwerze  i utworzyć wpis do usługi z Windows Services Control Manager.
  • Metoda Main musi zawierać komendę Run która wydaje polecenia dla usług zawartych w projekcie. Metoda Run ładuje usługi w Control Manager na odpowiednim serwerze. Jeśli użyjemy szablonu projektu windows services to metoda ta jest napisana z automatu :)
  • Windows Service jest uruchomiony w innym windows station niż interaktywne okno zalogowanego użytkownika. Sama stacja dla windows services nie jest interaktywna i np. okna dialogowe nie są pokazywane co może spowodować, że program przestaje odpowiadać. Podobnie komunikaty o błędach, dlatego wszystko powinno być zapisywane w logu systemowym.
  • Usługi windows są uruchomione w swoim własnym kontekście bezpieczeństwa i są uruchomione przed zalogowaniem użytkownika do systemu Windows na którym dane usługi są zainstalowane. Konto systemowe ma więcej uprawnień i przywilejów niż konto zwykłego użytkownika dlatego trzeba uważać z dostępem do usług. Im więcej uprawnień do usług ma użytkownik tym bardziej są one narażone na wykorzystanie luki w ich bezpieczeństwie.

Jak stworzyć projekt usługi windows?

Ogólnie mówiąc:

  1. Wybierz w VS new project i nastepnie z zakładki windows –> windows service.
  2. Napisz procedury OnStart i OnExit i przysłoń wszystkie inne metody które potrzebujesz.
  3. Dodaj potrzebne instalatory dla usług.
  4. Zbuduj projekt
  5. Zrób projekt instalacji usługi a następnie zainstaluj ją.
  6. Uruchom usługi np. przez panel sterowania.

No to teraz jak to wygląda czyli implementacja takiej usługi.

Po stworzeniu projektu w VS

  1. Zmieńmy we właściwościach nazwę usługi. Jest to konieczne, ponieważ musimy pamiętać, że usługa musi mieć unikatową nazwę.
  2. Uzupełniamy metodę OnStart. Metoda ta tak, naprawdę nie ma kontroli. Musi ona być zwrócona po tym jak usługa zostanie uruchomiona. Nie może ona być “zapętlona na wieki” albo blokowana. Aby użyć w niej jakieś proste mechanizmy wyboru można by użyć komponent System.Timers.Timer . Jest to bodajże w ćwiczeniu pierwszym tego podrozdziału także zachęcam do przeanalizowania.
  3. Uzupełniamy metodę OnExit czyli wszystko to co nam jest niezbędne aby zatrzymać usługę.
  4. Opcjonalnie możemy przysłonić metody OnPause i OnContinue. Musimy tylko pamiętać aby ustawić ServiceBase.CanPauseAndContinue na true.
  5. Również opcjonalnie możemy ustawić metodę OnShutDown która jest wykonywana podczas zamykania systemu operacyjnego. Tutaj z kolei musimy pamiętać o ustawieniu ServiceBase.CanShutdown na true :)
  6. Kolejna i ostatnia omawiana opcjonalna metoda to OnPowerEvent która jest wywoływana podczas przejścia komputera w stan wstrzymania. Analogicznie do dwóch poprzednich podpunktów pamiętajmy ServiceBase.CanHandlePowerEvent = true.

Tworzenie projektu instalacji do usług

Jak już wspominałem nie można uruchomić usługi od tak z pliku wykonywalnego. To
ograniczenie uniemożliwia prowadzenie i debugowania aplikacji bezpośrednio z środowiska programistycznego Visual Studio. Usługi muszą być zainstalowane przed uruchomieniem. Aby utworzyć instalator przy pomocą VS należy:

  1. Kliknąć w projekcie windows service, w designer prawy przyciskiem myszki i wybrać Add Installer
  2. Ustawiamy właściwość StartType w ProjectInstaller komponentu ServiceInstaller. Do wyboru trzy: Automatic – usługa uruchamia się automatycznie podczas uruchamiania komputera                     Manual – ustawiony domyślnie, użytkownik musi uruchomić usługę ręcznie                                Disabled- usługa nie uruchamia się automatycznie i użytkownik jej nie może sam włączyć bez zmiany tupu startu
  3. Ustawiamy w tym samym komponencie opis i nazwę wyświetlaną dla usługi
  4. Definiujemy ServicesDependedOn czyli listę usług które są potrzebne aby nasza poprawnie działa.
  5. Określamy kontekst zabezpieczeń poprzez ustawienie właściwość Account w komponencie ServicesProcessInstaller na jeden z dostępnych tj. LocalService, NetworkService, LocalSystem, User (ustawione domyślnie)
  6. Określamy dla naszej usługi start-up object. Aby to zrobić w Solution Explorer klikamy prawym na projekt, wybieramy właściwości i mamy możliwość w zakładce Application ustawienie tego obiektu.
  7. Na koniec budujemy nasz projekt czyli F5 :)

W tym momencie można zainstalować usługę ręcznie przy użyciu narzędzia InstallUtil lub utworzyć projekt instalacji MSI.

Ręczna instalacja

Aby zainstalować ręcznie usługę włączamy narzędzie InstallUtil które jest dostępne w  %windir%\Microsoft.NET\Framework\v2.0.50727\).

Aby zainstalować usługę, uruchom InstallUtil<yourservice.exe>.

Aby odinstalować swoje usługi, należy uruchomić InstallUtil / u <yourservice.exe>

Stworzenie instalatora
  1. Dodajemy nowy projekt do naszego solution.
  2. Z lewej strony jako typ projektu rozwijamy listę Other Project Type--->Setup and Deployment i wybieramy Setup Project.
  3. Następnie klikamy na ten projekt w solution explorer prawym i wybieramy Add--->Project Output. Tam wybieramy projekt wyjściowy i z całej listy PrimaryOutPut.
  4. Następnie podobnie jak wyżej lecz najeżdżamy na View i wybieramy Custom Action
  5. Tam klikamy prawy i wybieramy Add Custom Action
  6. Klikamy dwa razy na application folder i zaznaczamy nasz Primary Action i zatwierdzamy ok
  7. Klikamy prawym na nasz setup projekt i wybieramy Bulid

To tyle na dzisiaj. Warto zgłębić wiedzę na temat usług windows co polecam zarówno Wam jak i Sobie :) Trzymajcie się!! Do piątku!

Kolejny artykuł z serii to 70-536: Configuring Applications

Tagi: , ,

Pingbacks and trackbacks (2)+

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading


Eastgroup.pl na facebooku