Sdílet prostřednictvím


Architektura programování aplikace služby

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:

Aplikace služby systému Windows jsou založeny na třídě, která dědí z System.ServiceProcess.ServiceBase třídy. Přepíšete metody z této třídy a definujete pro ně funkce, které určují, jak se vaše služba chová.

Hlavní třídy, které jsou součástí vytváření služeb, jsou:

Kromě toho lze k manipulaci se samotnou službou použít pojmenovanou ServiceController třídu. Tato třída není zapojena do vytváření služby, ale lze ji použít ke spuštění a zastavení služby, předání příkazů do ní a vrácení řady výčtů.

Definování chování služby

Ve třídě služby přepíšete funkce základní třídy, které určují, co se stane, když se stav služby změní ve Správci řízení služeb. Třída ServiceBase zveřejňuje následující metody, které můžete přepsat pro přidání vlastního chování.

metoda Přepsat na
OnStart Uveďte, jaké akce by se měly provést při spuštění vaší služby. V tomto postupu musíte napsat kód, aby služba prováděla užitečnou práci.
OnPause Uveďte, co se má stát, když je služba pozastavená.
OnStop Uveďte, co se má stát, když služba přestane běžet.
OnContinue Uveďte, co se má stát, když služba po pozastavení obnoví normální fungování.
OnShutdown Uveďte, co by se mělo stát těsně před vypnutím systému, pokud je vaše služba v té době spuštěná.
OnCustomCommand Uveďte, co se má stát, když vaše služba obdrží vlastní příkaz. Další informace o vlastních příkazech najdete na webu MSDN online.
OnPowerEvent Uveďte, jak má služba reagovat při přijetí události řízení spotřeby, jako je nízká baterie nebo pozastavená operace.

Poznámka:

Tyto metody představují stavy, že služba prochází během své životnosti; služba přejde z jednoho stavu na další. Například službu nikdy nedostanete, aby reagovala na OnContinue příkaz dříve OnStart , než byla volána.

Existuje několik dalších vlastností a metod, které jsou zajímavé. Tady jsou některé z nich:

  • Metoda Run ve ServiceBase třídě. Toto je hlavní vstupní bod služby. Při vytváření služby pomocí šablony služby systému Windows se kód vloží do metody vaší aplikace Main pro spuštění služby. Tento kód vypadá takto:

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
        { new Service1() };
    Run(ServicesToRun);
    
    Dim ServicesToRun() As System.ServiceProcess.ServiceBase
    ServicesToRun =
        New System.ServiceProcess.ServiceBase() {New Service1()}
    System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    

    Poznámka:

    Tyto příklady používají pole typu ServiceBase, do kterého lze přidat každou službu, kterou vaše aplikace obsahuje, a pak lze všechny služby spustit společně. Pokud ale vytváříte pouze jednu službu, můžete se rozhodnout, že pole nepoužijete a jednoduše deklarujete nový objekt, ze ServiceBase něhož dědí a pak ji spustíte. Příklad najdete v tématu Postupy: Zápis služeb prostřednictvím kódu programu.

  • Řada vlastností ve ServiceBase třídě. Tyto metody určují, jaké metody lze ve vaší službě volat. Pokud je například CanStop vlastnost nastavena na true, lze volat metodu OnStop ve vaší službě. Pokud je vlastnost nastavena CanPauseAndContinue na true, OnPause a OnContinue metody lze volat. Když nastavíte jednu z těchto vlastností na true, měli byste přepsat a definovat zpracování pro přidružené metody.

    Poznámka:

    Vaše služba musí alespoň OnStart přepsat a OnStop být užitečná.

Můžete také použít komponentu ServiceController , která se nazývá komunikace s existující službou, a řídit chování stávající služby.

Viz také