web-dev-qa-db-fra.com

Exécuter un fichier de commandes en tant que service Windows

Pour exécuter une application, un fichier de commandes doit être lancé (par exemple, démarrer Jetty, afficher les journaux en direct, etc.). L'application ne fonctionnera que si ce fichier de commandes est en cours d'exécution. Je suis donc obligé de faire fonctionner ce fichier de commandes et de ne pas me déconnecter du serveur Windows.

Ce fichier de commandes peut-il être exécuté en tant que service? J'expérimente une des suggestions d'une question similaire .

125
publicRavi

NSSM est totalement gratuit et hyper facile, exécutez la commande Invite/terminal en tant qu'administrateur:

nssm install "YourCoolServiceNameLabel"

alors une boîte de dialogue apparaîtra afin que vous puissiez choisir où est le fichier que vous voulez exécuter.

désinstaller

nssm remove "YourCoolServiceNameLabel"
114
Junior M

Pourquoi ne pas simplement le configurer comme une tâche planifiée dont l'exécution est planifiée au démarrage?

58
Stephen Martin

Il y a une cmd intégrée dans windows pour faire ceci: sc create . Pas aussi sophistiqué que nssm, mais vous n’avez pas besoin de télécharger un logiciel supplémentaire.

sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]

Remarque

  • start = demande signifie que vous devez démarrer le service vous-même
  • un espace est requis après =
  • J'ai rencontré une erreur au démarrage du service, selon laquelle le service ne répondait pas à temps, mais il était clair que le service avait exécuté le fichier .bat avec succès. Je n'ai pas encore creusé dans ceci mais ce thread a expérimenté la même chose et l'a résolu en utilisant nssm pour installer le service.
6
w00ngy

Bien que ce ne soit pas gratuit (mais 39 $), FireDaemon a si bien fonctionné pour moi, je dois le recommander. Il exécutera votre fichier de commandes, mais dispose de nombreuses fonctionnalités supplémentaires très utiles, telles que la planification, la surveillance des services, l’installation de services basée sur une interface graphique ou XML, les dépendances, les variables d’environnement et la gestion des journaux. 

J'ai commencé à utiliser FireDaemon pour lancer les serveurs d'applications JBoss (run.bat), mais je me suis vite rendu compte que la richesse des capacités de configuration de FireDaemon me permettait de supprimer le fichier de commandes et de recréer l'intention de ses commandes dans la définition du service FireDaemon. .

Il existe également un SUPER FireDaemon appelé Trinity que vous voudrez peut-être consulter si vous disposez d'un grand nombre de serveurs Windows sur lesquels gérer ce service (ou, techniquement, n'importe quel service).

3
Nicholas

Comme Doug Currie dit utiliser RunAsService. 

De mon expérience passée, vous devez vous rappeler que le service que vous générez sera 

  • avoir un ensemble complètement différent de variables d'environnement
  • doivent être soigneusement inspectés pour les problèmes de droits/autorisations 
  • pourrait causer des dégâts s'il ouvre des boîtes de dialogue demandant tout type d'entrée

je ne sais pas si le dernier s'applique toujours… c’était une grosse jument de nuit dans un projet sur lequel j’avais travaillé il ya quelque temps.

3
lexu

AlwaysUp exécutera facilement votre fichier de commandes en tant que service. Il est similaire à FireDaemon (mentionné ci-dessus) et n’est pas gratuit, mais vous trouverez peut-être que le jeu de fonctionnalités enrichi est un atout dans un environnement professionnel.

Bonne chance!

0
CoreTech

Pas besoin de logiciel supplémentaire. Utilisez le planificateur de tâches -> créer une tâche -> masqué. La case à cocher pour masqué se trouve dans le coin inférieur gauche. Définissez la tâche pour qu'elle se déclenche lors de la connexion (ou quelle que soit la condition de votre choix), puis choisissez la tâche dans l'onglet Actions. Son exécution masquée garantit que la tâche est exécutée silencieusement en arrière-plan, à la manière d'un service.

Notez que vous devez également configurer le programme pour qu'il s'exécute "que l'utilisateur soit connecté ou non", sinon le programme sera toujours exécuté au premier plan.

0
Zediiiii