Představení aplikací spouštěných jako služby systému Windows

Poznámka:

Tento článek se nevztahuje na hostované služby v .NET. Nejnovější obsah ve službách Windows používajících Microsoft.Extensions.Hosting.BackgroundService a šablonu Pracovní služba najdete v tématech:

Služby systému Microsoft Windows, dříve označované jako služby NT, umožňují vytvářet dlouhotrvající spustitelné aplikace, které běží ve vlastních relacích Systému Windows. Tyto služby lze automaticky spustit při spuštění počítače, lze je pozastavit a restartovat a nezobrazují žádné uživatelské rozhraní. Díky těmto funkcím jsou služby ideální pro použití na serveru nebo vždy, když potřebujete dlouhotrvající funkce, které neruší ostatní uživatele, kteří pracují na stejném počítači. Můžete také spouštět služby v kontextu zabezpečení konkrétního uživatelského účtu, který se liší od přihlášeného uživatele nebo výchozího účtu počítače. Další informace o službách a relacích Windows najdete v dokumentaci k sadě Windows SDK.

Služby můžete snadno vytvářet tak, že vytvoříte aplikaci nainstalovanou jako službu. Předpokládejme například, že chcete monitorovat data čítače výkonu a reagovat na prahové hodnoty. Můžete napsat aplikaci služby systému Windows, která naslouchá datům čítače výkonu, nasadit aplikaci a začít shromažďovat a analyzovat data.

Službu vytvoříte jako projekt sady Microsoft Visual Studio a definujete v něm kód, který určuje, jaké příkazy se dají do služby odeslat a jaké akce se mají provést při přijetí těchto příkazů. Příkazy, které se dají odeslat do služby, zahrnují spuštění, pozastavení, obnovení a zastavení služby; můžete také spouštět vlastní příkazy.

Po vytvoření a sestavení aplikace ji můžete nainstalovat spuštěním nástroje příkazového řádku InstallUtil.exe a předáním cesty ke spustitelnému souboru služby. Pomocí Správce řízení služeb pak můžete službu spustit, zastavit, pozastavit, obnovit a nakonfigurovat. Mnoho z těchto úloh můžete také provést v uzlu Služby v Průzkumníku serveru nebo pomocí ServiceController třídy.

Aplikace služeb vs. jiné aplikace sady Visual Studio

Aplikace služeb fungují odlišně od mnoha jiných typů projektů několika způsoby:

  • Zkompilovaný spustitelný soubor, který vytvoří projekt aplikace služby, musí být nainstalován na serveru, aby mohl projekt fungovat smysluplným způsobem. Aplikaci služby nelze ladit ani spustit stisknutím klávesy F5 nebo F11; Službu nebo krok do jeho kódu nelze okamžitě spustit. Místo toho musíte nainstalovat a spustit službu a pak připojit ladicí program k procesu služby. Další informace naleznete v tématu Postupy: Ladění aplikací služby systému Windows.

  • Na rozdíl od některých typů projektů je nutné vytvořit součásti instalace pro aplikace služeb. Instalační komponenty nainstalují a zaregistrují službu na serveru a vytvoří položku pro vaši službu pomocí Správce řízení služeb systému Windows. Další informace naleznete v tématu Postupy: Přidání instalačních programů do aplikace služby.

  • Metoda Main aplikace služby musí vydat příkaz Spustit pro služby, které váš projekt obsahuje. Metoda Run načte služby do Správce řízení služeb na příslušném serveru. Pokud použijete šablonu projektu Služby systému Windows, tato metoda se za vás automaticky zapíše. Všimněte si, že načtení služby není totéž jako spuštění služby. Další informace najdete níže v části Životnost služby.

  • Aplikace služby Systému Windows běží na jiné stanici oken než interaktivní stanice přihlášeného uživatele. Stanice oken je zabezpečený objekt, který obsahuje schránku, sadu globálních atomů a skupinu desktopových objektů. Vzhledem k tomu, že stanice služby Windows není interaktivní stanice, dialogová okna vyvolaná z aplikace služby systému Windows nebudou zobrazena a mohou způsobit, že váš program přestane reagovat. Podobně by se chybové zprávy měly protokolovat v protokolu událostí systému Windows, nikoli v uživatelském rozhraní.

    Třídy služeb systému Windows podporované rozhraním .NET Framework nepodporují interakci s interaktivními stanicemi, tj. přihlášeným uživatelem. Rozhraní .NET Framework také nezahrnuje třídy, které představují stanice a plochy. Pokud vaše služba Windows musí pracovat s jinými stanicemi, budete muset přistupovat k nespravovanému rozhraní API systému Windows. Další informace najdete v dokumentaci k sadě Windows SDK.

    Interakce služby Windows s uživatelem nebo jinými stanicemi musí být pečlivě navržena tak, aby zahrnovala scénáře, jako je například uživatel, který není přihlášený, nebo uživatel, který má neočekávanou sadu objektů plochy. V některých případech může být vhodnější napsat aplikaci pro Windows, která běží pod kontrolou uživatele.

  • Aplikace služeb systému Windows běží ve vlastním kontextu zabezpečení a spouští se před tím, než se uživatel přihlásí k počítači s Windows, na kterém jsou nainstalovány. Měli byste pečlivě naplánovat, v jakém uživatelském účtu se má služba spouštět; služba spuštěná v rámci systémového účtu má více oprávnění a oprávnění než uživatelský účet.

Životnost služby

Služba prochází několika interními stavy během své životnosti. Nejprve se služba nainstaluje do systému, na kterém bude spuštěna. Tento proces spustí instalační programy pro projekt služby a načte službu do Správce řízení služeb pro tento počítač. Správce řízení služeb je centrální nástroj poskytovaný systémem Windows pro správu služeb.

Po načtení služby je nutné ji spustit. Spuštění služby umožňuje začít fungovat. Službu můžete spustit z Správce řízení služeb, z Průzkumníka serveru nebo z kódu voláním Start metody. Metoda Start předá zpracování metodě aplikace OnStart a zpracuje veškerý kód, který jste tam definovali.

Spuštěná služba může v tomto stavu existovat po neomezenou dobu, dokud nebude zastavena nebo pozastavena nebo dokud počítač nevypíná. Služba může existovat v jednom ze tří základních stavů: Running, Pausednebo Stopped. Služba může také hlásit stav čekajícího příkazu: ContinuePending, PausePending, StartPendingnebo StopPending. Tyto stavy značí, že byl vydán příkaz, například příkaz k pozastavení spuštěné služby, ale dosud nebyl proveden. Můžete se dotazovat, Status abyste zjistili, v jakém stavu je služba, nebo můžete použít WaitForStatus k provedení akce, když dojde k některému z těchto stavů.

Službu můžete pozastavit, zastavit nebo obnovit ze Správce řízení služeb, z Průzkumníka serveru nebo voláním metod v kódu. Každá z těchto akcí může volat přidruženou proceduru ve službě (OnStopOnPausenebo OnContinue), ve které můžete definovat další zpracování, které se má provést při změně stavu služby.

Typy služeb

Existují dva typy služeb, které můžete v sadě Visual Studio vytvořit pomocí rozhraní .NET Framework. Služby, které jsou jedinou službou v procesu, jsou přiřazeny typ Win32OwnProcess. Služby, které sdílejí proces s jinou službou, mají přiřazený typ Win32ShareProcess. Typ služby můžete načíst dotazem na ServiceType vlastnost.

Pokud dotazujete existující služby, které nebyly vytvořeny v sadě Visual Studio, může se někdy zobrazit i jiné typy služeb. Další informace o těchto tématech naleznete v tématu ServiceType.

Služby a komponenta ServiceController

Tato komponenta se používá k připojení k nainstalované službě a manipulaci se stavemServiceController. Pomocí ServiceController komponenty můžete spustit a zastavit službu, pozastavit a pokračovat v jeho fungování a odesílat vlastní příkazy do služby. Při vytváření aplikace služby ale nemusíte používat komponentu ServiceController . Ve většině případů by vaše ServiceController komponenta měla existovat v samostatné aplikaci od aplikace služby systému Windows, která definuje vaši službu.

Další informace najdete na webu ServiceController.

Požadavky

  • Služby musí být vytvořeny v projektu aplikace služby systému Windows nebo v jiném projektu s podporou rozhraní .NET Framework, který při vytváření a dědění z ServiceBase třídy vytvoří soubor .exe.

  • Projekty obsahující služby systému Windows musí mít součásti instalace pro projekt a jeho služby. To lze snadno provést z okna Vlastnosti . Další informace naleznete v tématu Postupy: Přidání instalačních programů do aplikace služby.

Viz také