luktom.net
  • blog
  • kontakt
  • english





Topshelf czyli usługi Windows z górnej półki

28 mar, 2016
C#
Brak komentarzy
Odsłony : 8103

Usługi Windows to wygodny sposób na uruchamianie naszych aplikacji przy starcie, zapewnienie im automatycznych restartów jak również możliwość impersonacji na wybrane konto.

Choć Visual Studio pozwala na stworzenie specjalnego typu projektu do celów utworzenia usługi Windows to jednak jest to szalenie niewygodne – zarówno pod kątem tworzenia i debugowania jak i instalacji takowej usługi w systemie docelowym.

Znacznie wygodniejszym rozwiązaniem jest użycie biblioteki TopShelf.

Czym jest TopShelf?

TopShelf to swego rodzaju wrapper obsługujący wszystkie operacje związane z usługami Windows – od definicji usługi, po spięcie z akcjami startu i zatrzymania po obsługę instalacji usługi. Dodatkowo, aplikację stworzoną w oparciu o TopShelf możemy wygodnie uruchomić jako aplikację konsolową – dzięki czemu jej debugowanie staje się bajecznie łatwe.

Instalacja TopShelf

Instalacja jest bardzo prosta i sprowadza się do zainstalowania paczku NuGeta:

Install-Package TopShelf

Jeśli w projekcie używamy NLoga, to możemy zainstalować od razu paczkę ze wsparciem dla niego – TopShelf użyje go do logowania informacji dotyczących stanu usługi oraz procedury startu i zatrzymania:

Install-Package TopShelf.NLog

Tworzenie usługi

W projekcie typu Console Application usługę przy użyciu TopShelf definiujemy w następujący sposób:

private static void Main(string[] args)
{
	HostFactory.Run(x =>
	{
		x.SetServiceName("MyService");
		x.SetDisplayName("MyService");
		x.SetDescription("This is sample service powered by TopShelf.");

		x.StartAutomatically();

		x.UseNLog();

		x.Service(service =>
		{
			service.ConstructUsing(srv => new MyService());

			service.WhenStarted(srv => srv.Start());
			service.WhenStopped(srv => srv.Stop());
		});
	});
}

W powyższym kodzie:

  • Linie 5-7 opisują tworzoną usługę. Najistotniejsza jest linia 5, gdyż definiuje ona nazwę usługi, którą w przyszłości możemy używać w skryptach (np. wywołując polecenie net start MyService).
  • Linia 9 definiuje oczekiwane zachowanie w czasie startu systemu – w powyższym przykładzie usługa wystartuje automatycznie.
  • Linia 11 określa, że chcemy aby TopShelf użył NLoga jako loggera.
  • Linie 13-19 opisują w jaki sposób utworzyć klasę obsługującą usługę (linia 15) oraz wskazują jakie zachowania usługi chcemy obsługiwać oraz wskazują metody do ich obsługi.

Tak utworzoną aplikację możemy z miejsca wystartować jako aplikację konsolową, w tym także z podłączonym debuggerem. TopShelf uruchomi aplikację w trybie interaktywnym a także przechwyci na sekwencję Ctrl+C do celów czystego zamknięcia aplikacji przy użyciu zdefiniowanej w WhenStopped metody.

Instalacja usługi

Aby zainstalować aplikację jako usługę systemową uruchamiamy konsolę w trybie administratora, przechodzimy do katalogu z binarkami aplikacji i wydajemy komendę:

MyService.exe install

Tak zainstalowaną usługą możemy sterować przy użyciu komend:

net start MyService
net stop MyService

TopShelf wspiera także deinstalację usługi, jest ona równie prosta:

MyService.exe uninstall

Instancje

Ciekawą i bardzo przydatną funkcją TopShelf są instancje – aplikację możemy zainstalować kilkukrotnie na jednym systemie podając unikatową nazwę instancji:

MyService.exe install /instance:First
MyService.exe install /instance:Second

Uruchomienie poszczególnych instancji wygląda wtedy następująco:

net start MyService$First
net start MyService$Second

Podsumowanie

Powyżej zaprezentowałem tylko podstawowe i najbardziej przydatne funkcje TopShelfa. Jeśli potrzebujesz większej kontroli nad usługą – jak np. definiowanie na jakim koncie ma działać usługa lub jak ma wyglądać jej polityka przywracania po awarii – zachęcam do zapoznania się z dokumentacją.



Tagi :   c#nlogtopshelfusługiwindowswindows service

Powiązane wpisy

  • Aktywacja routingu IP w Windows 7 / Windows Server 2008

  • Ciekawe komendy linii poleceń Windows XP – część 1

  • Windows 7 i skrót do Komputera na Pasku zadań

  • Zdalne wylogowanie użytkownika

  • Dodaj komentarz

    Click here to cancel reply

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>





    Łukasz Tomaszkiewicz

    Łukasz Tomaszkiewicz

    Pasjonat chmury, szczególnie AWSa, który nieustannie automatyzuje powtarzające się czynności i optymalizuje procesy, przy okazji wdrażając dobre praktyki dotyczące bezpieczeństwa. Jego szerokie doświadczenie w zakresie tworzenia oprogramowania, projektowania baz danych, a także wirtualizacji serwerów i zarządzania infrastrukturą w chmurze pozwala mu spojrzeć przekrojowo na współczesny stack technologiczny.

    W wolnym czasie fotograf, sporadycznie piszący blogger :) a także regularny prelegent na krakowskich grupach związanych z IT.

    Wyznawca Vim'a :)

    Kategorie

    • Ansible
    • AWS
    • C#
    • Chatboty
    • Cloud
    • Daj się poznać 2017
    • Docker
    • Inne
    • Linux
    • Open source
    • Organizacyjne
    • Prelekcje
    • Sieci komputerowe
    • SQL Server
    • Windows
    • Windows Server
    • Wirtualizacja

    Najczęściej czytane

    • Creating single node VSAN cluster
    • SQL Server – walidacja numerów PESEL i NIP
    • Konfiguracja serwera DHCP na routerach Cisco
    • Aktywacja routingu IP w Windows 7 / Windows Server 2008
    • Konwersja maszyn wirtualnych z ESXi do Hyper-V przy użyciu SCVMM 2012
    • Jak podłączyć program R do SQL Servera?

    Tagi

    .net ai ansible asp.net mvc aws aws cli bot builder bot framework c# centos certyfikaty chatbot chatboty cisco cmd docker dsp2017 esxi hyperv kontenery konteneryzacja linux mvc nlp openvpn plssug pobieranie powershell prelekcje rancher redhat router sieci smogbot sql server ssd ssl vmware vsphere windows windows mobile windows server wirtualizacja wit.ai wrzuta

    Copyright © 2006-2018 by Łukasz Tomaszkiewicz. Wszelkie prawa zastrzeżone