Freigeben über


Architektur der Dienstanwendungsprogrammierung

Hinweis

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

Windows-Dienstanwendungen basieren auf einer Klasse, die von der System.ServiceProcess.ServiceBase Klasse erbt. Sie überschreiben Methoden aus dieser Klasse und definieren Funktionen für diese, um zu bestimmen, wie sich Ihr Dienst verhält.

Die wichtigsten Klassen, die an der Diensterstellung beteiligt sind, sind:

Darüber hinaus kann eine benannte ServiceController Klasse verwendet werden, um den Dienst selbst zu bearbeiten. Diese Klasse ist nicht an der Erstellung eines Diensts beteiligt, kann jedoch verwendet werden, um den Dienst zu starten und zu beenden, Befehle an ihn zu übergeben und eine Reihe von Enumerationen zurückzugeben.

Definieren des Dienstverhaltens

In Ihrer Dienstklasse überschreiben Sie Basisklassenfunktionen, die bestimmen, was passiert, wenn der Status Des Diensts im Dienststeuerungs-Manager geändert wird. Die ServiceBase Klasse macht die folgenden Methoden verfügbar, die Sie überschreiben können, um benutzerdefiniertes Verhalten hinzuzufügen.

Methode Grund für die Außerkraftsetzung
OnStart Geben Sie an, welche Aktionen ausgeführt werden sollen, wenn Der Dienst gestartet wird. Sie müssen Code in diesem Verfahren schreiben, damit Ihr Dienst nützliche Aufgaben ausführt.
OnPause Geben Sie an, was passieren soll, wenn Der Dienst angehalten wird.
OnStop Geben Sie an, was passieren soll, wenn der Dienst nicht mehr ausgeführt wird.
OnContinue Geben Sie an, was passieren soll, wenn der Dienst nach der Pause wieder normal funktioniert.
OnShutdown Geben Sie an, was vor dem Herunterfahren des Systems geschehen soll, wenn Ihr Dienst zu diesem Zeitpunkt ausgeführt wird.
OnCustomCommand Geben Sie an, was passieren soll, wenn Ihr Dienst einen benutzerdefinierten Befehl empfängt. Weitere Informationen zu benutzerdefinierten Befehlen finden Sie unter MSDN online.
OnPowerEvent Geben Sie an, wie der Dienst reagieren soll, wenn ein Energieverwaltungsereignis empfangen wird, z. B. eine niedrige Batterie oder ein angehaltener Betrieb.

Hinweis

Diese Methoden stellen Zustände dar, dass der Dienst während seiner Lebensdauer durchläuft; der Dienst wechselt von einem Zustand zum nächsten. Beispielsweise werden Sie den Dienst niemals dazu bringen, auf einen OnContinue Befehl zu reagieren, bevor OnStart aufgerufen wurde.

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

  • Die Run Methode für die ServiceBase Klasse. Dies ist der Haupteinstiegspunkt für den Dienst. Wenn Sie einen Dienst mithilfe der Windows-Dienstvorlage erstellen, wird Code in die Methode Ihrer Anwendung Main 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 ServiceBaseverwendet, in dem jeder Dienst, den Ihre Anwendung enthält, hinzugefügt werden kann, und dann können alle Dienste zusammen ausgeführt werden. Wenn Sie jedoch nur einen einzelnen Dienst erstellen, können Sie das Array nicht verwenden und einfach ein neues Objekt deklarieren, das ServiceBase von diesem erbt, und führen Sie es dann aus. Ein Beispiel finden Sie unter How to: Write Services Programmatically.

  • Eine Reihe von Eigenschaften für die ServiceBase Klasse. Mit diesen Eigenschaften wird bestimmt, welche Methoden in Ihrem Dienst aufgerufen werden können. Wenn die CanStop Eigenschaft beispielsweise auf true festgelegt ist, kann die OnStop Methode für Ihren Dienst aufgerufen werden. Wenn die CanPauseAndContinue-Eigenschaft auf true festgelegt ist, können die OnPause- und OnContinue-Methoden 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 eine Komponente wie ServiceController verwenden, um mit einem bestehenden Dienst zu kommunizieren und dessen Verhalten zu steuern.

Siehe auch