2008-10-03 9 views
6

Dites que j'ai une application tierce qui effectue un travail en arrière-plan, mais imprime toutes les erreurs et tous les messages sur la console. Cela signifie qu'actuellement, nous devons garder un utilisateur connecté au serveur, et redémarrer l'application (double-cliquer) chaque fois que nous redémarrons.Comment puis-je exécuter une application CLI en tant que service Windows?

Pas si cool.

J'étais un peu sûr, qu'il y avait un moyen facile de le faire - une enveloppe de service générique, qui peut être configuré avec un fichier journal pour stdout et stderr.

J'ai vérifié svchost.exe, mais according to this site, c'est seulement pour les choses DLL. Pitié.

EDIT: L'application doit être démarrée à partir d'un fichier séquentiel. FireDaemon semble faire l'affaire, mais je pense qu'il est un peu exagéré, pour quelque chose qui peut être fait dans < 10 lignes de code python ... Eh bien, Not Invented Here ...

Répondre

10

Check out srvany.exe à partir du Resource Kit. Cela permettra de lancer n'importe quoi en tant que service. si vous configurez ces touches:

Vous pouvez transmettre des paramètres dans la définition de service à votre exécutable via srvany.exe vous pouvez alors exécuter un fichier batch en tant que service par Seting le Registre comme suit:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters] 
"Application"="C:\\Windows\\System32\\cmd.exe" 
"AppParameters"="/C C:\\My\\Batch\\Script.cmd" 
"AppDirectory"="C:\\My\\Batch" 

Remarque RegEdit plutôt que d'utiliser un fichier, vous n'avez besoin que de simples barres obliques inverses dans les valeurs.

1

Découvrez FireDaemon. Il existe une version gratuite (FireDaemon lite je pense) qui permet seulement 1 service installé à la fois, mais c'est un outil très utile pour la mise en place de services. Il entoure également correctement les fichiers batch, si cela est nécessaire.

3

Pourquoi ne pas mettre en œuvre simplement un wrapper de service très mince, voici un guide de démarrage rapide pour écrire un service dans .NET Writing a Useful Windows Service in .NET in Five Minutes

Lorsque vous avez que vous courir pouvez utiliser la classe Process pour démarrer l'application et le configurer de sorte que vous pouvez gérer stdout/stderr vous-même (ProcessStartInfo est votre ami).

0

Je seconde l'option firedaemon. Vous pouvez également définir l'option permettant au service d'interagir avec le bureau pour lui permettre d'afficher la fenêtre de sortie cli. Ils n'offrent plus une version gratuite, mais si vous cherchez sur le web pour firedaemon Lite, vous pouvez trouver la version gratuite plus ancienne ou peut-être aller à la route payante.

4

Je recommanderais NSSM: The Non-Sucking Service Manager.

  • domaine public
  • 32/64-bit EXEs (!)
  • implémente correctement les messages d'arrêt de service, et envoie le signal approprié à vos applications pour un arrêt progressif.