Einführung in Windows-Dienste in C#
Windows-Dienste sind leistungsstarke Tools im .NET-Ökosystem, die Hintergrundaufgaben ohne Benutzereingriff ausführen können. Das Erstellen eines Windows-Dienstes in C# kann sich kompliziert anhören, aber in seinem Video "Einführung in Windows-Dienste in C# - Erstellen, Installieren und Verwenden eines Dienstes mit Topshelf" erklärt Tim Corey Schritt für Schritt, wie es geht.
In diesem Artikel werden wir das Video durchgehen und jedes Thema behandeln, um Klarheit und Kontinuität zu gewährleisten.
Einführung in die Windows-Dienste
Tim stellt Windows-Dienste als leistungsstarke, oft übersehene Werkzeuge für die Automatisierung vor. Diese Anwendungen sind so konzipiert, dass sie im Hintergrund laufen und Aufgaben erledigen, ohne dass eine Benutzeroberfläche erforderlich ist. Übliche Beispiele sind der SQL Server Agent oder die Hyper-V-Dienste.
Tim betont, wie wichtig die Praxis für die Beherrschung von C# ist. Er empfiehlt, den in der Videobeschreibung verlinkten Quellcode zum praktischen Lernen herunterzuladen.
Erstellen einer Konsolen-Demo-Anwendung
Mit Visual Studio erstellt Tim ein neues Konsolenanwendungsprojekt namens SimpleHeartbeatService. Obwohl Sie eine Windows Service-Projektvorlage verwenden könnten, zieht Tim den Konsolenansatz aus Gründen der Einfachheit beim Debuggen vor.
Es geht nicht darum, welchen Code ich hier einfüge, sondern darum, wie man den Dienst selbst erstellt", erklärt Tim.
Was ist ein Windows-Dienst?
Tim öffnet die Registerkarte Dienste in Windows über die Suche im Startmenü (einfach "Dienste" eingeben und die Eingabetaste drücken). Er erklärt, dass Dienste, die im Hintergrund laufen, wichtige Funktionen des Betriebssystems ausführen, wie z. B. Remote Desktop oder MySQL-Server.
Das Ziel ist es, einen neuen Eintrag in dieser Liste mit benutzerdefiniertem Code zu erstellen.
Visual Studio Projekttypen: Konsolenanwendung vs. Windows-Dienst
Man könnte versucht sein, das Windows Service-Projekt in Visual Studio zu wählen, aber Tim erklärt, dass es schwieriger zu debuggen ist. Mit einer Konsolenanwendung können Sie die Anwendung lokal ausführen und testen, so dass Sie keinen Debugger an einen Live-Dienst anschließen müssen.
Das eingebaute Projekt vom Typ Service erschwert das Debugging, weil man es erst installieren und dann einen Debugger anschließen muss
Hinzufügen von Topshelf über NuGet
Um die Implementierung des Dienstes zu vereinfachen, fügt Tim Topshelf, ein Open-Source-Framework, über NuGet hinzu. Diese beliebte Bibliothek (mit Millionen von Downloads) hilft bei der Erstellung von Windows-Diensten ohne Boilerplate-Code.
Schritte:
-
Rechtsklick auf Referenzen
-
Wählen Sie NuGet-Pakete verwalten
- Topshelf suchen und installieren
Schreiben der Dienstlogik
Tim erstellt eine Heartbeat-Klasse mit zwei öffentlichen Methoden: Start() und Stop(). Innerhalb des Konstruktors richtet er einen System.Timers.Timer ein, der jede Sekunde ausgeführt wird.
Das Ereignis "Elapsed" dieses Timers fügt die aktuelle Zeit an eine .txt-Datei im Ordner C:\temp\\demos\ an. Dies stellt eine Hintergrundaufgabe dar, die kontinuierlich ausgeführt wird.
"Dieser Timer schreibt jede Sekunde in eine Textdatei, um zu zeigen, dass der Dienst aktiv ist."
Damit wird simuliert, wie langwierige Prozesse in realen Diensten funktionieren, z. B. das Scannen von Ordnern oder das Drucken von Dokumenten.
Verkabelungsdienst mit Topshelf
Mithilfe von HostFactory.Run integriert Tim Topshelf in die Anwendung:
-
Definiert die Heartbeat-Klasse
-
Abbildung der Methoden Start() und Stop()
- Konfiguriert den Dienst so, dass er als LocalSystem ausgeführt wird, und erteilt die erforderlichen Berechtigungen
Außerdem legt er Metadaten für den Dienst fest:
-
Name des Dienstes: HeartbeatService
-
Anzeigename: Heartbeat Service
- Beschreibung: Verwendung zu Demonstrationszwecken in einem YouTube-Video
Ausführen des Dienstes als Konsolenanwendung
Vor der Installation führt Tim die Anwendung aus, um sie zu testen. Der Timer fügt Zeitstempel korrekt an die Datei heartbeat.txt an. Mithilfe der Überwachungsfunktion von Notepad++ zeigt er Aktualisierungen in Echtzeit.
Installieren und Überprüfen des Dienstes
Tim kopiert die .exe und die zugehörigen Dateien aus dem bin\Debug-Ordner an einen festen Speicherort (z. B. C:\demos\HeartbeatService). Er verwendet eine administrative Eingabeaufforderung und führt die folgenden Befehle aus:
SimpleHeartbeatService.exe install
SimpleHeartbeatService.exe start
SimpleHeartbeatService.exe install
SimpleHeartbeatService.exe start
Dadurch wird der Dienst zum Service Control Manager hinzugefügt. Wenn Sie die Registerkarte Dienste erneut öffnen und auf Aktualisieren klicken, ist der Dienst nun sichtbar und wird ausgeführt.
"Es ist wirklich einfach, einen Dienst zu installieren, und es ist wirklich einfach, Dinge mit einem Dienst zu tun."
Zum Deinstallieren:
SimpleHeartbeatService.exe uninstall
SimpleHeartbeatService.exe uninstall
Recap: Vorteile und Überlegungen
Tim fasst zusammen, dass das Erstellen und Installieren eines Dienstes mit Topshelf einfach ist. Er warnt jedoch davor, dass das unendliche Schreiben von Dateien zu Speicherproblemen führen kann, was eine gute Erinnerung an die richtige Protokollverwaltung ist.
Ideen für Dienstleistungen in der realen Welt
Tim teilt praktische Ideen für Windows-Dienste:
-
Ordner bereinigen: Alte Dateien aus Downloads löschen
-
Bild-Organisation: Fotos in Ordnern nach Datum sortieren
-
CSV-Verarbeitung: Überwachen eines Ordners und automatischer Import von CSV-Dateien in eine Datenbank
- E-Mail-Automatisierung: Überwachen Sie eine Helpdesk-Tabelle und senden Sie Benachrichtigungen
Die Beispiele zeigen, wie Dienste zur Automatisierung von Hintergrundaufgaben und zur Integration mit Tools wie SQL Server, OneDrive und Aufgabenplanern verwendet werden können.
Abschließende Gedanken
Abschließend ermutigt Tim die Entwickler zum Experimentieren. Seien Sie einfach vorsichtig mit Speicher, Speicherung und Ereignisprotokollierung. Wenn Sie automatische Aktualisierungen, Sicherheitseinstellungen oder eine robustere Bereitstellung benötigen, ist eine weitere Konfiguration erforderlich.
"Hier gibt es eine Menge Power und eine Menge Dinge, die Sie tun können."
Abschluss
Anhand der schrittweisen Demonstration von Tim Corey in seinem Video wird die Erstellung eines Windows-Dienstes in C# zugänglich und praktisch. Durch den Einsatz von Topshelf kann eine Konsolenanwendung mit minimaler Einrichtung in einen voll funktionsfähigen Windows-Dienst umgewandelt werden. Unabhängig davon, ob Sie Protokolldateien verwalten, Datenbankereignisse verarbeiten oder Automatisierungsvorgänge durchführen, bieten Dienste eine leistungsstarke und skalierbare Möglichkeit zur Erstellung von .NET Framework- oder .NET Core-Anwendungen in Echtzeit und im Hintergrund.
Nutzen Sie dieses Tutorial als vollständigen Weg zum Verständnis, zur Erstellung und zur effizienten Installation von Diensten. Vergessen Sie nicht, gründlich zu testen und das Installationsprogramm oder die Eingabeaufforderung immer als Administrator auszuführen.


