463 Stimmen

Windows-Dienst aus ausführbarer Datei erstellen

Gibt es eine schnelle Möglichkeit, aus einer ausführbaren Datei einen Windows-Dienst zu erstellen, der diese Datei beim Start ausführt?

619voto

Sergii Pozharov Punkte 16576

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.

335voto

Kevin Tong Punkte 3296

NSSM verwenden( der nicht saugende Service Manager ), um eine .BAT- oder eine beliebige .EXE-Datei als Dienst auszuführen.

http://nssm.cc/

  • 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.

115voto

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

enter image description here

Mehr Informationen über: https://nssm.cc/usage

30voto

PodTech.io Punkte 4316

Diese extras haben sich als nützlich erwiesen. müssen als Verwalter

sc create  <service_name> binpath= "<binary_path>"
sc stop    <service_name>
sc queryex <service_name>
sc delete  <service_name>

Wenn Ihr Dienstname Leerzeichen enthält, schließen Sie ihn in "Anführungszeichen" ein.

23voto

KFL Punkte 15635

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>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X