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!

abyx
la source
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.

shylent
la source
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.

Matthew Blackford
la source
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)

Korayem
la source
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".

Evan Anderson
la source
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.

Fouet
la source
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.

user1977194
la source
2

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

sc create ServiceTest binpath= "C:\Windows\System32\cmd.exe /C C:\ServiceTest\Jenkins-Slave.bat"
Kushal Gangan
la source
Ç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

Il y a
la source
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.

octet de données
la source
Et est-ce le srvany que vous mentionnez, celui de Win2k3 qui n'a pas de version prise en charge pour Win2k8?
LarsH