it-swarm.com.de

Erstellen Sie einen Windows-Dienst aus einer ausführbaren Datei

Gibt es eine schnelle Möglichkeit, ausgehend von einer ausführbaren Datei einen Windows-Dienst zu erstellen, der ihn beim Start startet?

308
German Latorre

Um einen Windows-Dienst aus einer ausführbaren Datei zu erstellen, können Sie sc.exe verwenden:

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

Sie müssen Anführungszeichen um den tatsächlichen exe -Pfad und ein Leerzeichen nach dem binPath= setzen.

Weitere Informationen zum Befehl sc finden Sie in Microsoft KB251192 .

Beachten Sie, dass dies nicht für alle ausführbaren Dateien 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, wird beim Versuch, den Dienst zu starten, die folgende Fehlermeldung angezeigt:

Fehler 1053: Der Dienst hat nicht rechtzeitig auf die Start- oder Steuerungsanforderung reagiert.

Es gibt Tools, die einen Windows-Dienst aus willkürlichen ausführbaren Dateien erstellen können. Beispiele für solche Tools finden Sie in den anderen Antworten.

417
Sergii Pozharov

Verwenden Sie NSSM ( den Non-Sucking Service Manager ), um eine .BAT- oder eine beliebige .EXE-Datei als Dienst auszuführen.

http://nssm.cc/

  • Schritt 1 : Laden Sie NSSM herunter
  • Schritt 2 : Installieren Sie Ihren Service mit nssm.exe install [serviceName]
  • Schritt 3 : Dies öffnet eine GUI, mit der Sie Ihre ausführbare Datei finden
212
Kevin Tong

Erweitere (Kevin Tong) Antwort.

Schritt 1: Download & Unzip nssm-2.24.Zip

Schritt 2: Von der Befehlszeile aus:

C:\> nssm.exe install [servicename]

die GUI wird wie folgt geöffnet (das Beispiel ist der UT2003-Server). Navigieren Sie dann einfach zu: yourapplication.exe

enter image description here

Weitere Informationen unter: https://nssm.cc/usage

88
YumYumYum

Viele der vorhandenen Antworten beinhalten menschliche Eingriffe bei der Installation. Dies kann ein fehleranfälliger Prozess sein. Wenn Sie viele ausführbare Dateien als Dienste installieren möchten, müssen Sie diese zum Zeitpunkt der Installation manuell ausführen.

Im Hinblick auf das oben beschriebene Szenario 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

serman install <path_to_config_file>

installiert den Dienst. stdout und stderr werden alle protokolliert. Weitere Informationen finden Sie auf der Projektwebsite .

Eine funktionierende Konfigurationsdatei ist sehr einfach, wie unten gezeigt. Aber es hat auch viele nützliche Funktionen wie <env> und <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>
13
KFL

diese Extras erweisen sich als nützlich. Sie müssen als Administrator ausgeführt werden

sc install <service_name> binpath=<binary_path>
sc stop    <service_name>
sc queryex <service_name>
sc delete  <service_name>

Wenn Ihr Servicename Leerzeichen enthält, setzen Sie ihn in Anführungszeichen.

6
PodTech.io

Ich habe ein gutes Produkt dafür getestet: AlwaysUp . Nicht kostenlos, aber sie haben eine 30-tägige Testversion, sodass Sie es ausprobieren können ...

4
A. Masson