niedziela, 12 lipca 2009

Jak stworzyć i zainstalować serwis w Windows? [PL]

Przygotowanie serwisu dla systemu operacyjnego Windows jest przy użyciu Visual Studio (VS) bardzo proste. Wystarczy tylko utworzyć nowy projekt na podstawie szablonu "Windows Service" lub do istniejącego projektu dodać nowy element typu "Windows Service". Następnie należy zaimplementować metody:

  • OnStart, która wywoływana jest w momencie uruchamiania serwisu
  • OnStop, która wywoływana jest w momencie zatrzymywania serwisu

W tym miejscu należy jeszcze pamiętać, że nasze Assembly powinno być typu aplikacja, ale metoda "Main" najlepiej powinna wyglądać w sposób podobny do poniższego (oczywiście, jeżeli skorzystaliśmy wcześniej z odpowiedniego szablonu, to VS wykona wszystko za nas):

static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
  {
      new Service1()
  };
ServiceBase.Run( ServicesToRun );
}

W ten prosty sposób mamy przygotowaną aplikację, która może zostać wykorzystana jako serwis systemu Windows.

Pojawia się teraz pytanie: "Jak zainstalować taki serwis?"

Można to zrobić ręcznie, np. narzędziem installutil.exe, ale łatwiej chyba przygotować dodatkowy projekt instalacyjny (wystarczy wyklikać go przy pomocy VS z szablonu Setup Project), a do assembly naszej aplikacji-serwisu należy dodać odpowiedni instalator. W tym celu wybieramy z menu kontekstowego komponentu serwisu: "Add Installer":

W ten sposób zostaje dodany odpowiedni instalator do porjektu, który zawiera dwa komponenty: "Service Installer" i "Service Process Installer":

We właściwościach "Service Installer" ustawiamy nazwę serwisu i tryb uruchomienia:

Natomiast we właściwościach "Service Process Installer" ustawiamy konto, na którym serwis będzie uruchamiany ( w przypadku wybrania konta typu "konkretny użytkownik" instalator podczas instalacji zapyta się o nazwę użytkownika i hasło.)

Tak przygotowany serwis instalujemy przy pomocy stworzonego (drugiego projektu) typu "Setup" i możemy cieszyć się zinstalowanym serwisem w systemie Windows:

3 komentarze:

  1. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  2. A jak musiałbym ustawić taką sytuacje, że chciałbym żeby ten serwis co 2 minuty wykonywał jakieś zadanie np aktualizacja czegoś (osobna metoda z innej klasy) no i drugie wywołanie czasowe raz na tydzień które by wywoływało podobną metodę aktualizacji?? wszystko w c#. Czas byłby liczony od momentu odpalenia serwisu.

    OdpowiedzUsuń
  3. Możesz w tym celu uzyć zwykłego Timer'a. lub czegoś bardziej zaawansowanego jak w przykładach tutaj: http://blog.bobcravens.com/2009/10/an-event-based-cron-scheduled-job-in-c/

    OdpowiedzUsuń

Posty powiązane / Related posts