Programmierarchitektur für Dienstanwendungen

Hinweis

Dieser Artikel gilt nicht für gehostete Dienste in .NET. Die neuesten Inhalte zu Windows-Diensten mit Microsoft.Extensions.Hosting.BackgroundService und die Workerdienstvorlage finden Sie unter:

Windows-Dienstanwendungen basieren auf einer Klasse, die aus der Klasse System.ServiceProcess.ServiceBase erbt. Wenn Sie das Verhalten Ihres Diensts bestimmen möchten, können Sie Methoden aus dieser Klasse außer Kraft setzen und ihre Funktionen definieren.

Folgende Klassen sind wesentlich in die Diensterstellung eingebunden:

Darüber hinaus kann die Klasse ServiceController für die Bearbeitung des Diensts selbst verwendet werden. Diese Klasse ist nicht in die Erstellung eines Diensts eingebunden, kann jedoch für das Starten und Beenden des Diensts, für die Übergabe von Befehlen und für die Rückgabe einer Reihe von Enumerationen verwendet werden.

Definieren des Verhaltens Ihres Diensts

In Ihrer Dienstklasse setzen Sie die Funktionen der Basisklasse außer Kraft, die bestimmen, was geschieht, wenn der Status Ihres Diensts im Dienststeuerungs-Manager geändert wird. Die Klasse ServiceBase macht folgende Methoden verfügbar, die Sie außer Kraft setzen können, um benutzerdefiniertes Verhalten hinzuzufügen.

Methode Grund für die Außerkraftsetzung
OnStart Angabe, welche Maßnahmen ergriffen werden sollten, wenn Ihr Dienst ausgeführt wird. Sie müssen in dieser Prozedur Code schreiben, damit Ihr Dienst sinnvolle Arbeit leistet.
OnPause Angabe, was geschehen soll, wenn Ihr Dienst angehalten wird.
OnStop Angabe, was geschehen soll, wenn Ihr Dienst beendet wird.
OnContinue Angabe, was geschehen soll, wenn Ihr Dienst wieder aufgenommen wird und normal funktioniert, nachdem er angehalten wurde.
OnShutdown Angabe, was unmittelbar vor dem Herunterfahren Ihres Systems geschehen soll, wenn Ihr Dienst zu diesem Zeitpunkt ausgeführt wird.
OnCustomCommand Angabe, was geschehen soll, wenn Ihr Dienst einen benutzerdefinierten Befehl empfängt. Weitere Informationen zu benutzerdefinierten Befehlen finden Sie auf MSDN Online.
OnPowerEvent Angabe, wie der Dienst reagieren soll, wenn ein Energieverwaltungsereignis empfangen wird, wie z.B. ein niedriger Akkustand oder ein ausgesetzter Vorgang.

Hinweis

Diese Methoden stellen Status dar, die der Dienst in seiner Lebensdauer durchläuft: Er geht von einem Status in den nächsten über. So wird der Dienst niemals auf den Befehl OnContinue reagieren, bevor nicht OnStart aufgerufen wurde.

Es gibt einige andere Eigenschaften und Methoden, die von Interesse sind. Dazu gehören:

  • Die Methode Run in der Klasse ServiceBase. Dies ist der Haupteinstiegspunkt für den Dienst. Wenn Sie einen Dienst mit der Windows-Dienstvorlage erstellen, wird Code in die Methode Main Ihrer Anwendung eingefügt, um den Dienst auszuführen. Dieser Code sieht wie folgt aus:

    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)
    

    Hinweis

    In diesen Beispielen wird ein Array vom Typ ServiceBase verwendet, in das jeder Dienst hinzugefügt werden kann, den Ihre App enthält. Anschließend können sämtliche Dienste zusammen ausgeführt werden. Wenn Sie nur einen Dienst erstellen, empfiehlt es sich jedoch, nicht das Array zu verwenden, sondern einfach ein neues Objekt zu deklarieren, das aus ServiceBase erbt, und dieses Objekt auszuführen. Ein Beispiel finden Sie unter Gewusst wie: Programmgesteuertes Schreiben von Diensten.

  • Eine Reihe von Eigenschaften in der Klasse ServiceBase. Mit diesen Eigenschaften wird bestimmt, welche Methoden in Ihrem Dienst aufgerufen werden können. Wenn die Eigenschaft CanStop beispielsweise auf true festgelegt wird, kann die Methode OnStop in Ihrem Dienst aufgerufen werden. Wenn die Eigenschaft CanPauseAndContinue auf true festgelegt wird, können die Methoden OnPause und OnContinue aufgerufen werden. Wenn Sie eine dieser Eigenschaften auf true festlegen, sollten Sie anschließend die Verarbeitung für die zugeordneten Methoden außer Kraft setzen und definieren.

    Hinweis

    Ihr Dienst muss mindestens OnStart und OnStop außer Kraft setzen, um hilfreich zu sein.

Sie können auch die Komponente ServiceController verwenden, um mit dem vorhandenen Dienst zu kommunizieren und sein Verhalten zu steuern.

Siehe auch