Comment créer un service exécutant un fichier .bat sur Windows 2008 Server?


21

J'ai créé le service en utilisant

sc create myService binpath=myservice.bat

Mais quand je le démarre, il échoue avec le message d'erreur suivant:

[SC] StartService FAILED 1053:
    The service did not respond to the start or control request in a timely fashion.

Sur Win2k3, j'ai utilisé le srvany.exe du kit de ressources, mais il n'y a pas de kit de ressources pour win2k8. Pour l'instant, j'ai installé le srvany.exe sur ma machine, mais je ne pense pas que ce soit la meilleure façon de le faire.

Merci!


1
Vous pouvez exécuter un fichier batch en tant que service? Une tâche planifiée ne serait-elle pas meilleure? Je sais que si vous utilisez un véritable service Windows, l'événement OnLoad doit revenir en quelques secondes.
tsilb

Réponses:


9

Bien sûr, vous ne pouvez pas exécuter un service comme celui-ci. Avez-vous essayé d'utiliser srvany dans le serveur 2008? Pour autant que je sache, il n'y a pas de version «officielle» de srvany pour s2k8, mais vous pouvez toujours essayer, n'est-ce pas?

EDIT: Oh, j'ai oublié! Nous utilisons également FireDaemon pour exécuter des applications non-service en tant que services. Cependant, il n'est pas gratuit et sa fonctionnalité est un peu trop adaptée à vos besoins.


C'est ce que j'ai écrit.
abyx

hmm .. c'est bizarre. Il a juste filtré dans mon cerveau. Désolé. Quoi qu'il en soit, srvany semble être la meilleure chose à faire dans cette situation.
shylent

srvany fonctionne en 2008 (je l'utilise pour installer et exécuter Winamp.exe en tant que service sur un serveur domestique) ... mais vous ne pouvez pas exécuter simplement un fichier bat.
Oskar Duveborn

24

Utilisez NSSM pour exécuter un .BAT ou tout ancien fichier .EXE en tant que service. C'est presque un remplacement pour SRVANY et c'est une application sans fioritures et sans chichis.

http://iain.cx/src/nssm/

J'ai eu le même problème que vous et NSSM était le seul utilitaire qui fonctionnait.


3
Je n'en avais jamais entendu parler auparavant, mais cela semble être un outil précieux. Merci pour le conseil.
Skyhawk

Merci ça a marché pour moi. Bien que je recherche toujours des options pour arrêter le service à une heure spécifiée.
Ankit

8

Nous utilisons le Planificateur de tâches pour exécuter la tâche au démarrage de l'ordinateur (qu'un utilisateur soit connecté ou non)


1
pour masquer la fenêtre, lisez ceci ou ceci si vous n'êtes pas content de courir en tant que système
JonnyRaa

7

Vous ne pouvez pas simplement exécuter un fichier .BAT ou tout ancien fichier .EXE en tant que service. Les services Windows ne fonctionnent pas que vous. Vous pouvez utiliser un utilitaire comme le non-Sucking Service Manager (NSSM) ou l'utilitaire non libre SRVANY de Microsoft pour exécuter un programme arbitraire en tant que service, mais vous pouvez constater que vous n'obtenez pas un comportement d'arrêt très "gracieux".


3

La commande SC ajoute simplement les entrées de registre requises pour un service - si le fichier que vous spécifiez n'est pas un exe de service valide, il ne le transformera pas en un.


2

de: ce post sur les forums technet: http://social.technet.microsoft.com/Forums/en-US/winserverMigration/thread/98a97aee-c62b-4683-94ab-3777899cf7de/

Voici quoi faire ...

Au moment de cette publication, il n'y a pas d'outils du Kit de ressources Windows Server 2008, alors récupérez le "srvany.exe" dans les "Outils du Kit de ressources Windows Server 2003" et copiez-le dans un emplacement approprié sur votre serveur Win2008 (par exemple C: \ Windows \ System32 \). Utilisez "sc" pour créer un nouveau service qui lance "srvany" (par exemple sc créez MyService binPath = C: \ Windows \ System32 \ srvany.exe DisplayName = "My Custom Service") À l'aide de RegEdit: créez une clé "Paramètres" pour votre service (par exemple HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ MyService \ Paramaters \) Utilisation de RegEdit: dans la clé "Paramètres" nouvellement créée, créez une valeur de chaîne appelée "Application" et entrez le chemin d'accès complet à l'application que vous souhaitez exécuter en tant que un service. (Aucun devis requis.)

Et cela devrait le faire.

Remarque: certaines applications stockent leurs paramètres dans une ruche utilisateur, pas sous HKEY_LOCAL_MACHINE, vous devrez donc exécuter l'application pour la configurer, puis configurer le service pour qu'il s'exécute en tant qu'utilisateur.


2

essayez ceci ... cela a fonctionné pour moi ..

sc create ServiceTest binpath= "C:\Windows\System32\cmd.exe /C C:\ServiceTest\Jenkins-Slave.bat"

Ça n'a pas marché pour moi aussi! Même erreur que OP - n'a pas démarré en temps opportun.
Ravindra HV

Idem - n'a pas fonctionné.
Spedge

0

Je suis tombé sur cette chose. Voici l'outil appelé Bat_To_Exe_Converter. Il est très très facile de convertir n'importe quel fichier .bat en fichier .exe. Essayez-le. Téléchargez d'abord le téléchargeur et il téléchargera automatiquement le Bat_To_Exe_Converter. Cela m'a vraiment aidé à créer un service qui exécute mon fichier .bat via .exe. http://download.cnet.com/Bat-To-Exe-Converter/3001-2069_4-10555897.html?spi=eae5ab48292cc101b5f0ec370cf99ad0


Bienvenue dans Server Fault! Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
Scott Pack


0

J'ai trouvé deux autres options qui ne vous permettront pas d'atteindre votre portefeuille.

Vous pouvez avoir un sclancement srvanyqui pointe ensuite vers votre programme. (Il y a un message sur le forum auquel je ne peux pas créer de lien car je n'ai pas assez de représentants ici même si je le fais sur StackOverflow - grognement)

Voici les étapes utilisées par l'affiche originale:

  1. Utilisez scpour créer un nouveau service qui se lance srvany(par exemple sc create MyService binPath=C:\Windows\System32\srvany.exe DisplayName="My Custom Service")
  2. Utilisation de RegEdit: créez une Parametersclé pour votre service (par exemple HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters\)
  3. En utilisant RegEdit: dans la Parametersclé nouvellement créée , créez une valeur de chaîne appelée Applicationet entrez le chemin d'accès complet à l'application que vous souhaitez exécuter en tant que service. (Aucun devis requis.)

Si cela semble être un peu un hack , vous pouvez créer un service .NET pour lancer votre processus. Si vous souhaitez ignorer quelques étapes, voici un service .NET open source qui peut lancer des processus génériques:

http://www.codeproject.com/KB/system/xyntservice.aspx

Ajustez-le à vos besoins, mais il fera la plupart de ce que vous voulez hors de la boîte.


Et est-ce le srvany que vous mentionnez, celui de Win2k3 qui n'a pas de version prise en charge pour Win2k8?
LarsH
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.