Möchte man ein Skript oder eine Anwendung als Dienst unter Windows ausführen, so gibt es viele Wege ans Ziel.

Bordmittel

Bereits mit dem in Windows enthaltenen Befehl “sc” bzw. “sc.exe” kann man Dienste anlegen, konfigurieren und steuern. Anbei ein paar Beispiele:

Minimal-Konfiguration:

sc create <Dienstname> binpath= "C:\Test\test.exe"

Als Dienst- und Anzeigename wird der erste Parameter verwendet, Pfad und ausführbare Datei müssen angegeben werden. Als Starttyp wird per Standard “Manuell” gesetzt, ebenso das der Dienst mit dem Systemkonto ausgeführt wird. Es gibt zahlreiche weitere Parameter bzw. Optionen die man der “sc.exe” mitgeben kann. Die Hilfe bei Microsoft bietet ausführliche Informationen hierzu:

sc.exe create

Zum Ändern eines Dienstes verwendet man

sc.exe config

Tricky kann die Übergabe von Parametern für “binpath” sein, vor allem wenn die Anführungszeichen (engl. quote) notwendig sind. Eine sehr gute Anleitung zu diesem Punkt findet sich hier unter “OTHER TIPS”:

Genera Codice – When creating a service with sc.exe how to pass in context parameters?

Ein Beispiel:

sc create MeinDienst displayname= "Mein Dienst" binpath= "\"C:\temp\test01.cmd"\"

“\ am Anfang und \” am Ende sorgt dafür das der eigentliche Pfad samt ausführbare Datei in Anführungszeichen gesetzt wird:

"C:\temp\test01.cmd"

Möchte man wiederum einen Parameter übergeben sieht die Syntax wie folgt aus:

sc create MeinDienst displayname= "Mein Dienst" binpath= "\"C:\temp\test01.cmd\" -Parameter1

ergibt:

"C:\temp\test01.cmd" -Parameter1

Muss hinter dem Parameter ein weiterer Wert mit Anführungszeichen und/oder Leerzeichen folgen, muss der Befehl so aufgebaut sein:

sc create MeinDienst displayname= "Mein Dienst" binpath= "\"C:\temp\test01.cmd\" -Parameter1 "\"C:\temp\test01.conf\"

Drittanbietertools

Vielen alt-gedienten Windows-Admins dürfte diesbezüglich vor allem die “instsrv.exe” und “srvany.exe” aus älteren Windows Ressource Kits geläufig sein:

Microsoft – Docs – Erstellen eines benutzerdefinierten Diensts

Einen Download scheint es bei Microsoft nicht mehr zu geben, dafür findet man die Tools auf anderen Seiten wie z.B.

Der Windows Papst – IT Blog Walter – Applikation als Dienst laufen lassen

Die “srvany.exe” gilt sozusagen als Oldie, but Goldie und soll auch unter aktuellen Windows-Versionen noch funktionieren. Getestet habe ich das allerdings nicht.

Einfacher und mitunter mächtiger können diverse Helferlein von weiteren Anbietern sein. So lässt sich oft mittels einer grafischen Oberfläche oder mit Hilfe einer Datei ein Dienst konfigurieren und steuern.

Jüngeren Datums als “srvany.exe”, auch wenn es seit 2017 kein Update mehr gegeben hat, ist der NSSM – the Non-Sucking Service Manager. Dieses Tool kann sowohl via CLI bzw. Skript als auch mittels GUI genutzt werden.

Ganz ohne Eingabeaufforderung kommt die GUI allerdings auch nicht aus, da man für das Installieren eines neuen Dienstes oder für das Ändern eines Bestehenden entsprechende Aufrufe notwendig sind:

nssm install <Dienstname>
nssm edit <Dienstname>

Es öffnet sich die grafische Oberfläche die in verschiedene Registerkarten aufgeteilt ist. So lassen sich bequem die einzelnen Parameter und Optionen einstellen:

Tipp: Wenn man nur kurze Batch-Skripte hat, gemeint ist, das diese schnell durchlaufen und dann beendet sind, empfiehlt es sich keine automatische Neustart-Aktion festzulegen, da sonst das Skript mehrfach hintereinander aufgerufen wird:

Ebenfalls von Vorteil sind die “Hooks”, die es ermöglichen Aktionen in den verschiedenen Stati beispielsweise vor und nach dem Start eines Dienstes, sowie bei dessen Beendigung auszuführen:

Weitere Tools

Ein weiteres Tools mit grafischer Oberfläche ist DaemonMaster. Im Gegensatz zu den oben vorgestellten Helferlein muss dieses installiert werden und befindet sich im Alpha Stadium! In einem kurzen Test unter Windows 10 funktionierte dieses allerdings bereits ganz gut:

WinSW, der Windows Service Wrapper, erstellt und konfiguriert Dienste mittels Datei. Zum Testen von diesem bin ich bislang nicht gekommen.