Gibt es eine schnelle Möglichkeit, bei einer ausführbaren Datei einen Windows-Dienst zu erstellen, der beim Start gestartet wird?
windows
windows-services
Deutscher Latorre
quelle
quelle
Antworten:
So erstellen Sie einen Windows-Dienst aus einer ausführbaren Datei
sc.exe
:Sie müssen Anführungszeichen um den tatsächlichen
exe
Pfad und ein Leerzeichen nach dem setzenbinPath=
.Weitere Informationen zum
sc
Befehl finden Sie in Microsoft KB251192 .Beachten Sie, dass dies nicht für jede ausführbare Datei funktioniert: Die ausführbare Datei muss ein Windows-Dienst sein ( dh ServiceMain implementieren ). Wenn Sie eine nicht dienstleistungsfähige ausführbare Datei als Dienst registrieren, wird beim Versuch, den Dienst zu starten, die folgende Fehlermeldung angezeigt:
Es gibt Tools, mit denen ein Windows-Dienst aus beliebigen ausführbaren Dateien erstellt werden kann. Beispiele für solche Tools finden Sie in den anderen Antworten.
quelle
binpath=
und die Notwendigkeit, den ausführbaren Pfad mit doppelten Anführungszeichen zu umgeben, ist zumindest für Windows 10 völlig falsch. Das Anführungszeichen ist genau dann erforderlich, wenn der Pfad Sonderzeichen wie Leerzeichen enthält. Außerdem spielt das Gehäuse (Klein- / Groß- / Großbuchstaben) keine Rolle, auch bei Variablennamen, unddisplayname="my service"
ist ein weiterer Vorteil, den Sie über die Befehlszeile weitergeben können, während Sie einen Dienst erstellen, der als erste Zeile (Name
) bei angezeigt wirdservices.msc
.binPath=
wurde für mich unter Windows 7 benötigt, aber nicht unter Windows 10Verwenden Sie NSSM ( den nicht saugenden Service Manager ), um eine .BAT- oder eine beliebige .EXE-Datei als Service auszuführen.
http://nssm.cc/
nssm.exe install [serviceName]
quelle
Antwort erweitern (Kevin Tong).
Schritt 1: Laden Sie nssm-2.24.zip herunter und entpacken Sie es
Schritt 2: Über den Befehlszeilentyp:
C:\> nssm.exe install [servicename]
Die GUI wird wie folgt geöffnet (Beispiel: UT2003-Server). Durchsuchen Sie sie dann einfach zu: yourapplication.exe
Weitere Informationen unter: https://nssm.cc/usage
quelle
nssm.exe install [serviceName]
. Diese Lösung funktioniert, aber wenn Sie eine GUI-Anwendung haben, funktioniert sie unter Win Serever2003 nicht. Wenn Sie es später entfernen möchten, verwenden Sienssm.exe remove [youservicename]
nginx
ist nicht notwendig und irreführend. Der Befehl funktioniert auch ohne. Dies ist ein optionaler Parameter, wenn Sie den Dienstnamen über die Eingabeaufforderung angeben möchten.Viele der vorhandenen Antworten beinhalten menschliches Eingreifen zur Installationszeit. Dies kann ein fehleranfälliger Prozess sein. Wenn viele ausführbare Dateien als Dienste installiert werden sollen, müssen Sie sie als letztes zur Installationszeit manuell ausführen.
In Richtung des oben beschriebenen Szenarios habe ich serman erstellt , ein Befehlszeilentool zum Installieren einer ausführbaren Datei als Dienst. Alles, was Sie schreiben müssen (und nur einmal schreiben müssen), ist eine einfache Dienstkonfigurationsdatei zusammen mit Ihrer ausführbaren Datei. Lauf
wird den Dienst installieren.
stdout
undstderr
sind alle protokolliert. Weitere Informationen finden Sie auf der Projektwebsite .Eine funktionierende Konfigurationsdatei ist sehr einfach, wie unten gezeigt. Es hat aber auch viele nützliche Funktionen wie
<env>
und<persistent_env>
unten.quelle
Diese Extras erweisen sich als nützlich. Sie müssen als Administrator ausgeführt werden
Wenn Ihr Servicename Leerzeichen enthält, fügen Sie "Anführungszeichen" hinzu.
quelle
sc create <service_name> binpath= <binary_path>
Ich habe dafür ein gutes Produkt getestet: AlwaysUp . Nicht kostenlos, aber sie haben eine 30-tägige Testphase, damit Sie es ausprobieren können ...
quelle