Gibt es eine schnelle Möglichkeit, aus einer ausführbaren Datei einen Windows-Dienst zu erstellen, der diese Datei beim Start ausführt?
Antworten
Zu viele Anzeigen?Um einen Windows-Dienst aus einer ausführbaren Datei zu erstellen, können Sie sc.exe
:
sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"
Der eigentliche Text muss in Anführungszeichen gesetzt werden exe
Pfad und ein Leerzeichen nach der binPath=
.
Weitere Informationen über die sc
Befehl finden Sie in Microsoft KB251192 .
Beachten Sie, dass dies nicht für jede beliebige ausführbare Datei funktioniert: Die ausführbare Datei muss ein Windows-Dienst sein ( d.h. ServiceMain implementieren ). Wenn Sie eine ausführbare Datei, die kein Dienst ist, als Dienst registrieren, erhalten Sie beim Versuch, den Dienst zu starten, die folgende Fehlermeldung:
Fehler 1053: Der Dienst hat nicht rechtzeitig auf die Start- oder Kontrollanforderung geantwortet.
Es gibt Tools, die einen Windows-Dienst aus beliebigen, nicht dienstbezogenen ausführbaren Dateien erstellen können. Beispiele für solche Tools finden Sie in den anderen Antworten.
NSSM verwenden( der nicht saugende Service Manager ), um eine .BAT- oder eine beliebige .EXE-Datei als Dienst auszuführen.
- Schritt 1 : NSSM herunterladen
- Schritt 2 : Installieren Sie Ihr Gerät mit
nssm.exe install [serviceName]
- Schritt 3 : Es öffnet sich eine grafische Benutzeroberfläche, mit der Sie Ihre ausführbare Datei finden können.
Erweiternde (Kevin Tong) Antwort.
Schritt 1: Herunterladen & Entpacken nssm-2.24.zip
Schritt 2: Geben Sie in der Befehlszeile ein:
C:\> nssm.exe install [servicename]
öffnet sich die GUI wie unten abgebildet (das Beispiel ist ein UT2003-Server), dann suchen Sie einfach nach: yourapplication.exe
Mehr Informationen über: https://nssm.cc/usage
Viele der vorhandenen Antworten beinhalten ein menschliches Eingreifen zum Zeitpunkt der Installation. Dies kann ein fehleranfälliger Prozess sein. Wenn Sie viele ausführbare Dateien haben, die als Dienste installiert werden sollen, ist es das Letzte, was Sie tun möchten, dies manuell bei der Installation zu tun.
Im Hinblick auf das oben beschriebene Szenario habe ich serman ein Befehlszeilentool, um eine ausführbare Datei als Dienst zu installieren. Alles, was Sie schreiben müssen (und das nur einmal), ist eine einfache Dienstkonfigurationsdatei zusammen mit Ihrer ausführbaren Datei. ausführen
serman install <path_to_config_file>
wird der Dienst installiert. stdout
y stderr
werden alle protokolliert. Weitere Informationen finden Sie in der Projekt-Website .
Eine funktionierende Konfigurationsdatei ist sehr einfach, wie im Folgenden gezeigt wird. Aber sie hat auch viele nützliche Funktionen wie <env>
y <persistent_env>
unten.
<service>
<id>hello</id>
<name>hello</name>
<description>This service runs the hello application</description>
<executable>node.exe</executable>
<!--
{{dir}} will be expanded to the containing directory of your
config file, which is normally where your executable locates
-->
<arguments>"{{dir}}\hello.js"</arguments>
<logmode>rotate</logmode>
<!-- OPTIONAL FEATURE:
NODE_ENV=production will be an environment variable
available to your application, but not visible outside
of your application
-->
<env name="NODE_ENV" value="production"/>
<!-- OPTIONAL FEATURE:
FOO_SERVICE_PORT=8989 will be persisted as an environment
variable to the system.
-->
<persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>
- See previous answers
- Weitere Antworten anzeigen