Januar 15, 2022

Erstellen eines Windows-Dienstes in VB.NET

Umgebung: .NET, Visual Basic

Einführung

Sie möchten eine Anwendung schreiben, die ständig einige Dateien überwacht, ein Protokoll erstellt oder was auch immer, und die ständig im Hintergrund ausgeführt wird, während der Computer mit etwas anderem beschäftigt ist. Der beste Weg, dies zu tun, bestand darin, eine Windows-Anwendung kontinuierlich oder in regelmäßigen Abständen mit dem Windows-Scheduler auszuführen. Aber es gab einen großen Nachteil: Jemand musste sich am System anmelden, um diese Anwendung zu starten.

Dies ist kein Problem mehr, da der beste Weg, dies alles zu tun, darin besteht, einen Windows-Dienst für Windows 2000 / Windows NT zu erstellen.

Was ist der Windows-Dienst (früher NT-Dienst genannt)?

Die Kernfunktion eines Windows-Dienstes besteht darin, eine Anwendung im Hintergrund auszuführen. Einige Dinge, die sie von einer Windows-Anwendung unterscheiden, sind, dass ein Windows-Dienst gestartet wird, bevor sich ein Benutzer am System anmeldet (wenn er für den Start beim Booten eingerichtet wurde). Der Dienst kann so eingerichtet werden, dass der Benutzer ihn manuell starten muss.

Außerdem hat der Windows-Dienst einen eigenen Prozess; Daher läuft es sehr effizient. Normalerweise verfügt ein Windows-Dienst aus dem einfachen Grund, dass er auch dann ausgeführt werden kann, wenn niemand am System angemeldet ist, nicht über eine Benutzeroberfläche. Dies ist keine Regel; Sie können immer noch einen Windows-Dienst mit einer Benutzeroberfläche haben.

In Windows 2000 können Sie alle auf Ihrem Computer ausgeführten Dienste anzeigen, indem Sie Systemsteuerung, Verwaltung und dann auf Dienste klicken.

Erstellen eines Windows-Dienstes in VB.NET

Vor VB.Das Erstellen eines Windows-Dienstes war jedoch eine Menge Arbeit. Sie mussten eine Prozedur auf Systemebene verwenden, die nicht sehr einfach war, aber dank VB.NET dies ist sehr einfach geworden. Wir werden jetzt lernen, wie man einen Windows-Dienst erstellt.

Sie sollten ein paar Dinge wissen, bevor wir eintauchen. Der Windows-Dienst ist in Windows 95, 98 oder ME nicht verfügbar. Sie benötigen Windows NT oder Windows 2000, um Dienste ausführen zu können.

Der Vorteil der Verwendung von .NET besteht darin, dass das Framework alle Klassen enthält. Dies soll uns helfen, den Windows-Dienst zu erstellen, zu installieren und zu steuern.

Öffnen Sie Ihr Visual Studio .NET, erstellen Sie ein neues Windows-Service-Projekt, die wir MyService nennen, und klicken Sie dann auf OK.

Fügen Sie das Timer-Steuerelement über die Symbolleiste auf der Registerkarte Komponenten hinzu. Ändern Sie im Eigenschaftenfenster von Timer1 die Eigenschaft Intervall in 10000, d. h. 10 Sekunden.

Der Quellcode

Doppelklicken Sie auf das Steuerelement Timer1, um ein Codefenster für Timer1_Elapsed zu öffnen, und geben Sie den folgenden Code ein. (Dieser Code wird alle 10 Sekunden ausgeführt.)

 Dim MyLog As New EventLog() ' create a new event log ' Check if the the Event Log Exists If Not MyLog.SourceExists("MyService") Then MyLog.CreateEventSource("MyService", "Myservice Log") ' Create Log End If MyLog.Source = "MyService" ' Write to the Log MyLog.WriteEntry("MyService Log", "This is log on " & _ CStr(TimeOfDay), _ EventLogEntryType.Information)

Geben Sie den folgenden Code in die Prozedur onStart ein. (Diese Prozedur wird aufgerufen, wenn Sie den Dienst starten, der den Timer aktivieren soll.)

 Timer1.Enabled = True

Und geben Sie den folgenden Code in die Prozedur onStop ein. (Diese Prozedur wird aufgerufen, wenn Sie den Dienst beenden, wodurch der Timer deaktiviert wird.)

 Timer1.Enabled = False

Unsere Anwendung ist jetzt fertig, aber es müssen noch einige Dinge getan werden, bevor wir fortfahren können. Wenn wir diese Anwendung erstellen, ist die erstellte ausführbare Datei keine Windows-Anwendung. Es muss als Dienst installiert werden, aber keine Sorge; Wir müssen es nicht manuell tun. VB.Net hat die Möglichkeit, unserem Programm ein Installationsprogramm hinzuzufügen und dann ein Dienstprogramm zur Installation des Dienstes zu verwenden.

Installationsprogramm zum Projekt hinzufügen

Öffnen Sie den Service1.klicken Sie mit der rechten Maustaste und wählen Sie dann die Option Installationsprogramm hinzufügen. Dadurch wird ein Installationsprojekt, ProjectInstaller, hinzugefügt.vb, mit zwei Steuerelementen, ServiceProcessInstaller1 und ServiceInstaller1, in unserem bestehenden Projekt.

Wählen Sie das Steuerelement ServiceInstaller1 aus und öffnen Sie das Eigenschaftenfenster. Ändern Sie die Eigenschaften ServiceName und DisplayName in MyService. (Dies ist der Name, der in der Liste der Dienste in Dienstefenstern angezeigt werden soll.)

Wählen Sie das Steuerelement ServiceProcessInstaller1 aus und öffnen Sie das Eigenschaftenfenster. Ändern Sie die Eigenschaft Account in LocalSystem. (Dies muss angegeben werden, da wir dies auf unserem lokalen Computer ausführen müssen.)

Jetzt ist es Zeit, die Anwendung zu erstellen und eine ausführbare Datei zu erstellen. Wählen Sie Lösung erstellen aus dem Menü Erstellen aus, um eine ausführbare Datei mit Installationsanweisungen für den Dienst zu erstellen.

Installieren des Dienstes

Um diesen Dienst zu installieren, müssen wir das Programm InstallUtil, ein .NET-Dienstprogramm, verwenden, um den Windows-Dienst zu installieren. Sie finden dies im Ordner C:\WINNT\Microsoft.NET\Framework\v1.0.3705 . (Dies kann auf Ihrem Computer unterschiedlich sein, abhängig von der Version, die Sie verwenden.)

Alternativ können Sie das .NET-Befehlsfenster ausführen, indem Sie Start, Programme, Microsoft Visual Studio .NET, Visual Studio .NET-Tools, Visual Studio .NET-Eingabeaufforderung auswählen. Dadurch werden alle erforderlichen Pfade für Sie festgelegt.

Geben Sie den folgenden Befehl in dieses Fenster ein: InstallUtil C:\tgol\Myservice\Bin\Myservice.exe. (Dies ist der Pfad für die ausführbare Datei des gerade erstellten Dienstes. Denken Sie daran, VB.NET erstellt die ausführbare Datei im Ordner Bin unter dem Projektordner. Bitte stellen Sie sicher, dass Sie dies in Ihren ausführbaren Pfad ändern.) Bitte sehen Sie sich die Nachricht und das Protokoll an, um sicherzustellen, dass der Dienst ordnungsgemäß installiert ist.

Starten des Dienstes

Das Ausführen eines Dienstes und das Starten eines Dienstes sind zwei verschiedene Dinge. Wenn wir den Dienst mit InstallUtil installieren, führen wir den Dienst jetzt aus, müssen ihn jedoch noch starten. Öffnen Sie die Systemsteuerung, um den Dienst anzuzeigen und zu starten. Öffnen Sie Verwaltung, klicken Sie auf Dienste, suchen Sie MyService, klicken Sie mit der rechten Maustaste und wählen Sie Start, um diesen Dienst zu starten.

Jetzt hat unser Service begonnen. Öffnen Sie die Ereignisanzeige in der Verwaltung und klicken Sie auf das Anwendungsprotokoll, um die vom Dienst (MyService) alle 10 Sekunden erstellten Protokolle anzuzeigen. (Wenn keine Protokolle angezeigt werden, klicken Sie auf Aktualisieren . Sie müssen die Aktualisierung fortsetzen, um die neuesten Ereignisprotokolle anzuzeigen.

Dienst beenden

Öffnen Sie die Systemsteuerung, öffnen Sie Verwaltung, klicken Sie auf Dienste, klicken Sie mit der rechten Maustaste auf MyService, und wählen Sie Stopp, um den Dienst zu beenden.

Deinstallieren des Dienstes

Diese Prozedur ähnelt der Installation des Dienstes, aber jetzt führen wir den Parameter InstallUtil mit /U aus, der den Dienst deinstalliert:

InstallUtil /U C:\tgol\Myservice\Bin\Myservice.exe (oder ausführbarer Pfad auf Ihrem Computer). Bitte überprüfen Sie die Meldung, um zu bestätigen, dass der Dienst ordnungsgemäß deinstalliert wurde.

Tipps

  • Beenden Sie den Dienst und schließen Sie das Dienstfenster, bevor Sie den Dienst installieren/deinstallieren.
  • Deinstallieren /installieren Sie immer, wenn Sie Änderungen an der Dienstanwendung vornehmen.
  • Vermeiden Sie Benutzeroberfläche, Eingaben und msgbox in der Dienstanwendung.
  • Öffnen Sie ProjectInstaller.vb, wählen Sie ServiceInstaller1 control, und öffnen Sie das Eigenschaftenfenster. Ändern Sie die StartType-Eigenschaft in Automatisch, wenn Sie den Dienst automatisch starten möchten.

Fazit

Windows-Dienst wird oft übersehen. Verwenden Sie den Windows-Dienst anstelle einer Standardanwendung, wenn Sie etwas im Hintergrund überwachen oder verwalten müssen. Der einzige Nachteil ist die Installation, aber ich wette, es gibt mehr positive Aspekte dann negativ, wenn Windows-Dienst über Anwendungen mit Windows Scheduler auswählen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.