web-dev-qa-db-fra.com

Créer un service Windows à partir d'un exécutable

Existe-t-il un moyen rapide de créer, à partir d'un fichier exécutable, un service Windows qui, une fois démarré, le lance?

308
German Latorre

Pour créer un service Windows à partir d'un exécutable, vous pouvez utiliser sc.exe:

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

Vous devez avoir des guillemets autour du chemin exe réel et un espace après le binPath=.

Plus d'informations sur la commande sc peuvent être trouvées dans Microsoft KB251192 .

Notez que cela ne fonctionnera pas avec n'importe quel exécutable: l'exécutable doit être un service Windows ( implémenter ServiceMain ). Lorsque vous enregistrez un exécutable non-service en tant que service, le message d'erreur suivant s'affiche lors d'une tentative de démarrage du service:

Erreur 1053: le service n'a pas répondu à la demande de démarrage ou de contrôle dans les délais.

Certains outils peuvent créer un service Windows à partir d’exécutables arbitraires autres que des services. Voir les autres réponses pour obtenir des exemples de tels outils.

417
Sergii Pozharov

Utilisez NSSM ( le gestionnaire de service non-sucer ) pour exécuter un fichier .BAT ou un fichier .EXE en tant que service.

http://nssm.cc/

  • Étape 1 : Télécharger NSSM
  • Étape 2 : Installez votre service avec nssm.exe install [serviceName]
  • Étape 3 : Ceci ouvrira une interface graphique que vous utiliserez pour localiser votre exécutable.
212
Kevin Tong

Extending (Kevin Tong) répond.

Étape 1: Téléchargez et décompressez nssm-2.24.Zip

Étape 2: À partir du type de ligne de commande:

C:\> nssm.exe install [servicename]

il ouvrira l'interface graphique comme ci-dessous (l'exemple est le serveur UT2003), puis parcourez-le simplement jusqu'à: yourapplication.exe

enter image description here

Plus d'informations sur: https://nssm.cc/usage

88
YumYumYum

De nombreuses réponses existantes incluent une intervention humaine au moment de l'installation. Cela peut être un processus sujet aux erreurs. Si de nombreux exécutables doivent être installés en tant que services, la dernière chose à faire est de les faire manuellement au moment de l'installation.

Vers le scénario décrit ci-dessus, j'ai créé serman , un outil de ligne de commande pour installer un exécutable en tant que service. Tout ce dont vous avez besoin d'écrire (et d'écrire une seule fois) est un simple fichier de configuration de service avec votre exécutable. Courir

serman install <path_to_config_file>

va installer le service. stdout et stderr sont tous consignés. Pour plus d'informations, consultez le site web du projet .

Un fichier de configuration fonctionnel est très simple, comme illustré ci-dessous. Mais il possède également de nombreuses fonctionnalités utiles telles que <env> et <persistent_env> ci-dessous.

<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

ces extras s'avèrent utiles .. doivent être exécutés en tant que administrateur

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

Si votre nom de service comporte des espaces, mettez-les entre "guillemets".

6
PodTech.io

J'ai testé un bon produit pour cela: AlwaysUp . Pas gratuit, mais ils ont une période d'essai de 30 jours afin que vous puissiez l'essayer ...

4
A. Masson