Windows: Einen Dienst manuell erstellen (installieren)

/de/images/sc-create-windows-service-from-cmd.png

In Windows werden Dienste verwendet, um App-Binärdateien im Hintergrund auszuführen, normalerweise ohne dass eine Benutzerinteraktion erforderlich ist. Dienste können beim Windows-Start automatisch gestartet und kontinuierlich im Hintergrund ausgeführt werden, bis das System heruntergefahren wird. In diesem Beitrag wird erläutert, wie Sie aus einer ausführbaren Binärdatei einen neuen Systemdienst erstellen.

Es gibt mehrere integrierte Windows-Tools, mit denen Administratoren über die Eingabeaufforderung neue Dienste erstellen können. Dazu gehören der Konsolenbefehl sc.exe und das PowerShell-Cmdlet New-Service.

Der folgende Befehl erstellt einen neuen Dienst aus der angegebenen ausführbaren Datei mit zusätzlichen Argumenten:

sc create CorpCollectorService binPath="C:\Program Files (x86)\CORP\collector.exe-i C:\tools\config.xml"start=auto DisplayName="CORP Log Collector Service"

/de/images/sc-create-windows-service-from-cmd.png.webp

Wenn der Befehl erfolgreich ausgeführt wurde, erscheint eine Meldung:


SC CreateService SUCCESS

Folgende Argumente werden verwendet:

  • „CorpCollectorService“ – neuer Dienstname

  • „binPath“ – enthält den vollständigen Pfad zur ausführbaren Datei sowie alle erforderlichen Startargumente (in Anführungszeichen, wenn Leerzeichen vorhanden sind)

  • start=auto – startet den Dienst automatisch beim Windows-Start ( boot|system|auto|demand|disabled ).

  • „DisplayName“ – Anzeigename des Dienstes

Zusätzliche Parameter können verwendet werden:

  • „Typ“ – Art des Dienstes. Standardmäßig ist

besitzen

verwendet wird, was bedeutet, dass der Dienst in einem eigenen Prozess ausgeführt wird. Sie können hier auch angeben: own|share|kernel|filesys|adapt|rec|interact

  • Standardmäßig wird der Dienst im Namen von ausgeführt

Lokales System. Wenn Sie den Dienst im Namen eines bestimmten Benutzerkontos ausführen müssen, geben Sie den Benutzernamen und das Passwort mit den folgenden Optionen an: „obj=“woshub\user1"password=“myUserPassw0r1”`

Öffnen Sie nun das grafische Dienstverwaltungs-Snap-In „Services“ („services.msc“). Der neue Dienst wird in der Liste der Dienste angezeigt (drücken Sie „F5“, um die Service Manager-Datenbank zu aktualisieren). Hier können Sie den Dienst starten oder stoppen oder den Starttyp ändern. /de/images/new-service-appears-in-services-management-console.png.webp

Alle Diensteinstellungen werden unter dem Registrierungsschlüssel „HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\“ gespeichert. Der Unterschlüssel CorpCollectorService wurde automatisch für den neuen Dienst erstellt.

/de/images/services-settings-are-stored-in-the-registry.png.webp

Hier ist ein ähnlicher PowerShell-Befehl zum Erstellen eines neuen Dienstes:

New-Service-Name CorpCollectorService-BinaryPathName "C:\Program Files (x86)\CORP\collector.exe-i C:\tools\config.xml"-DisplayName "my test service"-Description "CORP Log Collector Service"-StartupType "Automatic"

/de/images/new-service-create-service-using-powershell.png.webp

Wenn Sie zum Starten des Dienstes einen Benutzernamen und ein Kennwort konfigurieren müssen, verwenden Sie die folgende Syntax:

` $username=“user123”$password=“PaSSw0rd1”$securepassword=ConvertTo-SecureString $password-AsPlainText-Force

$cred=New-Object System.Management.Automation.PSCredential ($username, $securepassword)

New-Service …-Credential $cred `

Beachten Sie, dass nicht alle ausführbaren Binärdateien erfolgreich als Windows-Dienste betrieben werden können. Die Anwendung muss speziell für den Betrieb als Dienst konzipiert sein, der auf Befehle des Service Control Managers (SCM) reagiert. Fehler 1053 wird angezeigt, wenn versucht wird, einen Dienst zu starten, der SCM-Steuersignale nicht verarbeiten kann:


Windows could not start the MyService1 service on Local Computer.Error 1053: The service did not respond to the start or control request in a timely fashion.

/de/images/windows-could-not-start-the-service-on-local-compu.png.webp

Mehrere Tools von Drittanbietern können verwendet werden, um einen Dienst aus einem Programm zu erstellen, das nicht für die Ausführung im Windows-Dienstmodus ausgelegt ist (einschließlich solcher mit grafischen Oberflächen). Das Windows Server Resource Kit 2003 enthielt die Befehle „srvany.exe“ und „instsrv.exe“, mit denen aus jeder Binärdatei ein Dienst erstellt werden konnte. Allerdings ist es inzwischen besser, das moderne Tool NSSM (Non-Sucking Service Manager) zu verwenden. Im Gegensatz zu älteren Microsoft-Tools überwacht es laufende App-Prozesse und bietet erweiterte Prozessverwaltungsfunktionen. NSSM kann jede App, jedes Skript oder jede ausführbare Datei als zuverlässigen Windows-Hintergrunddienst ausführen und bei einem Absturz automatisch neu starten.

NSSM kann mit dem WinGet-Paketmanager installiert werden:

winget install--id NSSM.NSSM-e

Um nun einen Dienst aus einer beliebigen ausführbaren Datei zu erstellen, führen Sie Folgendes aus:

nssm install testservice „C:\Tools\collector.exe“

Beachten Sie, dass in den Eigenschaften des neuen Dienstes „nssm.exe“ als ausführbarer Launcher für Ihre Anwendungsbinärdatei dient.

/de/images/create-a-service-using-nssm.png.webp

NSSM bietet eine einfache GUI, die eine bequeme Konfiguration von Dienstparametern ermöglicht.

Um beispielsweise einen zuvor erstellten Dienst zu bearbeiten, führen Sie Folgendes aus:

nssm edit testservice

/de/images/nssm-service-editor-gui.png.webp

Wir haben zuvor gezeigt, wie Sie NSSM verwenden, um ein PowerShell-Skript als Systemdienst auszuführen

*️⃣ Quelllink:

WinGet-Paketmanager, ein PowerShell-Skript als Systemdienst ausführen,