NTFAQFr DépartNewsDiscussion AreaLinksrechercheSpaceHelp

Q. Comment transformer une application en service ?

Le document suivant est la reprise de la page de JC bellamy , présente sur son excellent site.

Il peut être intéressant de transformer une application (que l'on a développée soi-même p.ex.) en service, de façon qu'elle soit démarrée conjointement au démarrage de NT, sans devoir attendre l'ouverture d'une session (ce qui ne se produit pas toujours, cas d'un serveur)
Le plus simple est de récupérer dans le kit de ressources techniques NT les 2 outils prévus pour cela et qui s'appellent :

Dans la réalité, ces outils ne "transforment" pas réellement une application en service.
Ce qui est fait est UNIQUEMENT le lancement du service srvany, auquel est indiqué en paramètre le nom de l'application que l'on veut voir lancée comme service.
Etant donné qu'il peut y avoir plusieurs applications dans ce cas, plusieurs instances de srvany seront alors exécutées.
Pour les distinguer, on leur attribue des noms différents arbitraires à l'aide de l'outil instsrv.

Cette transformation s'effectue en 2 phases :

  1. Dans une fenêtre de commande, en se plaçant dans le répertoire qui contient les 2 outils, exécuter instsrv.exe avec en paramètres le nom du service (arbitraire) suivi de srvany.exe :

    ATTENTION : si le répertoire contenant srvany.exe ne figure pas explicitement dans la variable d'environnement PATH, il faut le préciser dans cette commande (sinon un message d'erreur sera généré par instsrv.exe), ce qui est assez logique d'ailleurs, puisqu'au moment du démarrage de NT, le système doit savoir trouver "srvany.exe"
  1. Dans le panneau de configuration, lancer "Services" :

    - Sélectionner le service qui vient d'être créé, (avec, à ce moment là, un état indéfini, et un démarrage "automatique").
    - Dans le champ "Paramètres de démarrage", taper le nom de l'exécutable, en veillant à doubler les backslashes
    - Appuyer sur le bouton "Démarrer".
    L'état du service va passer en "Démarré" et l'application va alors démarrer (ici "Scanbin"). 
    Par contre
    , les  paramètres de démarrage n'étant pas sauvegardés, l'application ne sera pas lancée au prochain redémarrage de NT.

    Pour que ces paramètres soient mémorisés, il faut intervenir dans la Base de Registres à l'aide de Regedit ou Regedt32 (après avoir exécuté instsrv.exe) . La clef concernée s'appelle 

            HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xxxxx
           
    dans laquelle xxxxx est le nom du service que l'on a choisi.



    Il faut créer une sous-clef nommée Parameters, dans laquelle on va créer de 1 à 3 entrées de type chaîne :
    Nom de l'entrée Présence Valeur
    Application Obligatoire Chemin complet de l'application à lancer en tant que service
    AppParameters Optionnelle Paramètres à passer à l'application
    AppDirectory Optionnelle Répertoire de travail de l'application

Exemple (cas "d'école"!):

Le service JCB1 est lancé à chaque démarrage de NT, ce service lançant à son tour Scanbin.exe, lequel va analyser Notepad.exe

  1. Pour supprimer ce service, il suffit d'exécuter instsrv.exe avec en paramètre le nom du service suivi de "remove" :