Freigeben über


Programmierarchitektur für Dienstanwendungen

Windows-Dienstanwendungen basieren auf einer Klasse, die von der System.ServiceProcess.ServiceBase-Klasse erbt. Das Verhalten eines Diensts wird bestimmt, indem Methoden aus dieser Klasse überschrieben und Funktionen für sie definiert werden.

Nachfolgend werden die Hauptklassen aufgelistet, mit denen Dienste erstellt werden:

Zusätzlich kann mithilfe der Klasse ServiceController der Dienst selbst geändert werden. Diese Klasse spielt beim Erstellen von Diensten keine Rolle. Mit ihr können jedoch Dienste gestartet, beendet und Befehle an sie übergeben werden. Außerdem ist es möglich, eine Reihe von Aufzählungen zurückzugeben.

Festlegen des Verhaltens eines Diensts

In der Dienstklasse werden Funktionen der Basisklasse überschrieben, die festlegen, was geschieht, wenn der Status des Diensts im Dienststeuerungs-Manager geändert wird. Von der ServiceBase-Klasse werden die folgenden Methoden verfügbar gemacht. Benutzerdefiniertes Verhalten kann hinzugefügt werden, indem sie überschrieben werden.

Methode

Zweck des Überschreibens

OnStart

Angeben, welche Aktionen vorgenommen werden, wenn der Diensts gestartet wird. Es muss Code in diese Prozedur geschrieben werden, damit ein Dienst nützliche Arbeiten durchführen kann.

OnPause

Angeben, was geschehen soll, wenn der Dienst angehalten wird.

OnStop

Angeben, was geschehen soll, wenn der Dienst beendet wird.

OnContinue

Angeben, was geschehen soll, wenn vom Dienst nach dem Anhalten die normale Funktion fortgesetzt wird.

OnShutdown

Angeben, was geschehen soll, wenn das Herunterfahren des Systems unmittelbar bevorsteht, sofern der Dienst zu diesem Zeitpunkt ausgeführt wird.

OnCustomCommand

Angeben, was geschehen soll, wenn vom Dienst ein benutzerdefinierter Befehl empfangen wird. Weitere Informationen über benutzerdefinierte Befehle finden Sie in MSDN Online.

OnPowerEvent

Angeben, wie von dem Dienst beim Empfangen eines Energieverwaltungsereignisses reagiert wird, z. B. niedriger Akkustand oder Standbymodus.

Tipp

Diese Methoden stellen die Zustandswerte dar, die ein Dienst während seiner Lebensdauer durchläuft. Der Übergang des Diensts erfolgt von einem Zustand zum nächsten. Der Dienst reagiert beispielsweise erst auf einen OnContinue-Befehl, wenn zuvor OnStart aufgerufen wurde.

Verschiedene weitere Eigenschaften und Methoden sind von Interesse. Dazu gehören:

  • Die Run-Methode für die ServiceBase-Klasse. Sie stellt den Haupteinspringpunkt für einen Dienst dar. Wenn ein Dienst mit der Vorlage für Windows-Dienste erstellt wird, wird Code in die Main-Methode der Anwendung eingefügt, damit der Dienst ausgeführt wird. Der Code sieht folgendermaßen aus:

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

    Tipp

    In diesen Beispielen wird ein Array vom Typ ServiceBase verwendet. Zu diesem können alle Dienste hinzugefügt werden, die in der Anwendung enthalten sind. Anschließend können alle Dienste zusammen ausgeführt werden. Wenn jedoch nur ein einzelner Dienst erstellt wird, besteht keine Notwendigkeit, das Array zu verwenden. In diesem Fall kann einfach ein neues Objekt erstellt und ausgeführt werden, das von ServiceBase erbt. Ein Beispiel finden Sie unter Gewusst wie: Programmgesteuertes Schreiben von Diensten.

  • Eine Reihe von Eigenschaften der ServiceBase-Klasse, mit denen bestimmt wird, welche Methoden von einem Dienst aufgerufen werden können. Wenn beispielsweise die CanStop-Eigenschaft auf true festgelegt ist, kann die OnStop-Methode für den Dienst aufgerufen werden. Wenn die CanPauseAndContinue-Eigenschaft auf true festgelegt ist, kann die OnPause-Methode und die OnContinue-Methode aufgerufen werden. Wenn eine dieser Eigenschaften auf true festgelegt wird, müssen die zugeordneten Methoden überschrieben werden, und es ist notwendig, ihre Verarbeitung zu definieren.

    Tipp

    Der Dienst muss in jedem Fall OnStart und OnStop überschreiben.

Für die Kommunikation mit einem vorhandenen Dienst und die Steuerung seines Verhaltens kann außerdem eine Komponente mit dem Namen ServiceController verwendet werden.

Siehe auch

Aufgaben

Gewusst wie: Erstellen von Windows-Diensten

Konzepte

Einführung in Windows-Dienstanwendungen