Dela via


Programmeringsarkitektur för tjänstprogram

Kommentar

Den här artikeln gäller inte för värdbaserade tjänster i .NET. Det senaste innehållet i Windows-tjänster med hjälp av Microsoft.Extensions.Hosting.BackgroundService och arbetstjänstmallen finns i:

Windows Service-program baseras på en klass som ärver från System.ServiceProcess.ServiceBase klassen. Du åsidosätter metoder från den här klassen och definierar funktioner för dem för att avgöra hur tjänsten fungerar.

De viktigaste klasserna som ingår i skapandet av tjänster är:

Dessutom kan en klass med namnet ServiceController användas för att manipulera själva tjänsten. Den här klassen är inte involverad i skapandet av en tjänst, men kan användas för att starta och stoppa tjänsten, skicka kommandon till den och returnera en serie uppräkningar.

Definiera din tjänsts beteende

I tjänstklassen åsidosätter du basklassfunktioner som avgör vad som händer när tjänstens tillstånd ändras i Services Control Manager. Klassen ServiceBase exponerar följande metoder, som du kan åsidosätta för att lägga till anpassat beteende.

Metod Åsidosätt till
OnStart Ange vilka åtgärder som ska vidtas när tjänsten börjar köras. Du måste skriva kod i den här proceduren för att tjänsten ska kunna utföra ett användbart arbete.
OnPause Ange vad som ska hända när tjänsten pausas.
OnStop Ange vad som ska hända när tjänsten slutar köras.
OnContinue Ange vad som ska hända när tjänsten återupptar normal drift efter paus.
OnShutdown Ange vad som ska hända precis innan systemet stängs av om tjänsten körs vid den tidpunkten.
OnCustomCommand Ange vad som ska hända när tjänsten tar emot ett anpassat kommando. Mer information om anpassade kommandon finns i MSDN online.
OnPowerEvent Ange hur tjänsten ska svara när en energisparhändelse tas emot, till exempel ett batteri med låg batterinivå eller en pausad åtgärd.

Kommentar

Dessa metoder representerar tillstånd som tjänsten går igenom under sin livslängd. tjänsten övergår från ett tillstånd till ett annat. Du kommer till exempel aldrig att få tjänsten att svara på ett OnContinue kommando innan OnStart den har anropats.

Det finns flera andra egenskaper och metoder som är intressanta. Dessa kan vara:

  • - Run metoden för ServiceBase klassen. Det här är den viktigaste startpunkten för tjänsten. När du skapar en tjänst med hjälp av Windows Service-mallen infogas kod i programmets Main metod för att köra tjänsten. Den här koden ser ut så här:

    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)
    

    Kommentar

    I de här exemplen används en matris av typen ServiceBase, där varje tjänst som ditt program innehåller kan läggas till och sedan kan alla tjänster köras tillsammans. Om du bara skapar en enda tjänst kan du dock välja att inte använda matrisen och helt enkelt deklarera ett nytt objekt som ärver från ServiceBase och sedan köra den. Ett exempel finns i How to: Write Services Programmatically (Så här gör du: Skriva tjänster programmatiskt).

  • En serie egenskaper för ServiceBase klassen. Dessa avgör vilka metoder som kan anropas på din tjänst. När egenskapen CanStop till trueOnStop exempel är inställd på kan metoden för din tjänst anropas. När egenskapen CanPauseAndContinue är inställd på trueOnPause kan metoderna och OnContinue anropas. När du anger en av dessa egenskaper till truebör du sedan åsidosätta och definiera bearbetning för de associerade metoderna.

    Kommentar

    Tjänsten måste åsidosätta åtminstone OnStart och OnStop vara användbar.

Du kan också använda en komponent som ServiceController kallas för att kommunicera med och styra beteendet för en befintlig tjänst.

Se även