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:
System.ServiceProcess.ServiceBase: Wenn ein Dienst erstellt wird, werden Methoden aus der ServiceBase-Klasse überschrieben und Code definiert, um die Funktionsweise des Diensts in dieser geerbten Klasse zu bestimmen.
System.ServiceProcess.ServiceProcessInstaller und System.ServiceProcess.ServiceInstaller: Verwenden Sie diese Klassen, um den Dienst zu installieren und zu deinstallieren.
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 |
---|---|
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. |
|
Angeben, was geschehen soll, wenn der Dienst angehalten wird. |
|
Angeben, was geschehen soll, wenn der Dienst beendet wird. |
|
Angeben, was geschehen soll, wenn vom Dienst nach dem Anhalten die normale Funktion fortgesetzt wird. |
|
Angeben, was geschehen soll, wenn das Herunterfahren des Systems unmittelbar bevorsteht, sofern der Dienst zu diesem Zeitpunkt ausgeführt wird. |
|
Angeben, was geschehen soll, wenn vom Dienst ein benutzerdefinierter Befehl empfangen wird. Weitere Informationen über benutzerdefinierte Befehle finden Sie in MSDN Online. |
|
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.
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