Ihr erster Windows Service

1. Neues Windows‑Dienst‑Projekt erstellen

  1. Öffnen Sie Visual Studio und erstellen Sie ein neues Projekt
  2. Wählen Sie die Vorlage aus: Visual C# → Windows → Windows‑Dienst
  3. Legen Sie Projektnamen und Speicherpfad fest und klicken Sie auf OK

Hinweis: Neuere Visual Studio‑Versionen enthalten diese Vorlage nicht mehr. Sie wird nur von .NET Framework unterstützt. Für .NET Core/.NET 5+ wird die Verwendung von Worker Service empfohlen.

2. Aufbau des Projekts erläutert

Automatisch generierte Kern‑Dateien:

  1. Program.cs: Einstiegspunkt der Anwendung
  2. Service1.cs: Klasse mit der Hauptlogik des Dienstes
1. Einstiegscode in Program.cs
static class Program
{
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new Service1()
        };
        ServiceBase.Run(ServicesToRun);
    }
}Code-Sprache: JavaScript (javascript)

Zweck: Startet die Dienst‑Host‑Umgebung und lädt eine oder mehrere Dienst‑Instanzen.

2. Haupt‑Dienstklasse Service1.cs
public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    // Wird ausgeführt, wenn der Dienst startet
    protected override void OnStart(string[] args)
    {

    }

    // Wird ausgeführt, wenn der Dienst stoppt
    protected override void OnStop()
    {

    }
}
  • OnStart: Wird beim Dienststart aufgerufen, hier gehört Ihre Geschäftslogik hinein
  • OnStop: Wird beim Dienststopp aufgerufen, zum Freigeben von Ressourcen

3. Installer‑Komponente hinzufügen

Dieser Schritt ist zwingend erforderlich! Ohne ihn lässt sich der Dienst nicht im System registrieren.

Arbeitsschritte
  1. Gehen Sie zur Designer‑Ansicht von Service1, klicken Sie mit der rechten Maustaste → Installer hinzufügen
  2. Visual Studio erstellt automatisch ProjectInstaller.cs mit zwei zentralen Komponenten:
    • serviceInstaller1
    • serviceProcessInstaller1

Eigenschaften der Komponenten konfigurieren

  1. serviceInstaller1 (Dienst‑Informationen konfigurieren)
    • ServiceName: Interner Dienstname (Identifikation im Quellcode)
    • DisplayName: Anzeigename im Diensteverwaltung
    • Description: Beschreibung des Dienstes
    • StartType: Starttyp Manual(Manuell)/Automatic(Automatisch)
  2. serviceProcessInstaller1 (Ausführungs‑Benutzerkonto konfigurieren)
    • Account: Ausführungsidentität
    • LocalSystem: Lokales Systemkonto (höchste Berechtigungen, für Tests empfohlen)
    • User: Festgelegtes Windows‑Benutzerkonto (Standard, Benutzername und Passwort erforderlich)

4. Test‑Geschäftslogik schreiben

Ihre Geschäftslogik gehört in die Klasse Service1. Dort können Sie Ihren Code unterbringen. Weil sich Windows‑Dienste schlecht debuggen lassen, testen wir vorläufig über Log‑Ausgaben. Der Dienst muss installiert und deinstalliert werden.

Bearbeiten Sie die Datei Service1.cs

using System.IO;

protected override void OnStart(string[] args)
{
    // Schreibe Log‑Eintrag beim Start
    File.AppendAllText("log.txt", "Startzeit: " + DateTime.Now + Environment.NewLine);
}

protected override void OnStop()
{
    // Schreibe Log‑Eintrag beim Stopp
    File.AppendAllText("log.txt", "Stoppzeit: " + DateTime.Now + Environment.NewLine);
}Code-Sprache: JavaScript (javascript)

5. Kompilieren, installieren und Dienst starten

  1. Kompilieren Sie das Projekt, Sie erhalten WindowsServiceDemo.exe
  2. Registrieren Sie den Dienst mit InstallUtil.exe (Eingabeaufforderung als Administrator)
# Dienst installieren
InstallUtil.exe WindowsServiceDemo.exe

# Dienst deinstallieren
InstallUtil.exe /u WindowsServiceDemo.exeCode-Sprache: PHP (php)
  1. Öffnen Sie die Diensteverwaltung mit services.msc, suchen Sie Ihren Dienst, starten / stoppen Sie ihn und prüfen Sie die Log‑Datei.

Ein Dienst lässt sich nicht wie ein normales Programm ausführen oder debuggen. Er muss mit speziellen Werkzeugen installiert werden.

Wichtige Hinweise

  1. Kein direktes Debuggen mit F5: Windows‑Dienste unterstützen kein direktes Debuggen. Empfohlene Lösung:
    Implementieren Sie einen Dual‑Modus; Ausführung als Konsolen‑Anwendung bei Kommandozeilen‑Start, Ausführung als Dienst nach der Installation.
  2. Problem mit Pfaden: Relative Pfade funktionieren nicht, verwenden Sie vorzugsweise absolute Pfade.
  3. Berechtigungsprobleme: Das verwendete Benutzerkonto bestimmt die Zugriffsmöglichkeiten auf Festplatte, Netzwerk und freigegebene Ordner.
  4. Start‑Timeout: Lange blockierende Vorgänge innerhalb von OnStart lassen das System den Start als fehlgeschlagen einstufen. Langlaufende Aufgaben sollten in einem separaten Thread ausgeführt werden.

Ihr erster Windows Service

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert