Lancement et contrôle de votre application (Windows)

Sous Windows, il est possible d'exécuter une application Java soit en tant qu'application de bureau, soit en tant que service Windows en arrière-plan. Dans le cas d'un service, le Wrapper doit pouvoir être installé, désinstallé, démarré, arrêté, et son état doit pouvoir être interrogé, etc. Le fait que l'application dispose d'une interface graphique ou qu'elle soit destinée à s'exécuter dans une fenêtre de commande détermine également la façon dont elle sera lancée.

Voici les différentes méthodes pour démarrer le Wrapper :

Fichiers batch dédiés

Sur les systèmes Windows, la façon la plus courante de lancer le Wrapper consiste à utiliser des fichiers batch dédiés qui exécutent chaque action de contrôle du Wrapper. Cela permet à l'utilisateur final de double-cliquer sur les icônes des fichiers batch ou de créer des liens dans les menus.

Mettre en place les fichiers batch

Lorsque vous consultez le dossier %WRAPPER_HOME%\src\bin de la distribution du Wrapper, vous verrez un certain nombre de fichiers batch modèles, chacun étant utilisé pour une tâche spécifique. (Il existe d'autres fichiers dans le répertoire qui sont décrits ailleurs sur cette page.)

Lors de la mise en place du Wrapper, vous pouvez choisir lesquels des fichiers batch ci-dessus sont nécessaires pour l'application. Par exemple, si une application ne prend pas en charge la mise en pause, alors les fichiers PauseApp-NT.bat.in et ResumeApp-NT.bat.in ne sont pas nécessaires.

Personnaliser les fichiers batch

NOTE

Selon la configuration de l'explorateur de fichiers de votre ordinateur, il se peut que vous ne puissiez pas voir les extensions de fichiers.

Pour chaque fichier requis, copiez-le simplement dans le dossier bin de votre application. Lorsque vous le faites, renommez le fichier en remplaçant App par le nom de votre application, et supprimez le .in à la fin.

Exemple de remplacement des noms de fichiers :
App.bat.in             -> MyApp.bat
InstallApp-NT.bat.in   -> InstallMyApp-NT.bat
StartApp-NT.bat.in     -> StartMyApp-NT.bat
StopApp-NT.bat.in      -> StopMyApp-NT.bat
UninstallApp-NT.bat.in -> UninstallMyApp-NT.bat

Le début de tous les fichiers contient une section avec des variables qui peuvent être personnalisées.

rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
rem Optimized for use with version @wrapper.version@ of the Wrapper.

rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper

rem The directory where the Wrapper binary (.exe) file is located. It can be
rem  either an absolute or a relative path. If the path contains any special
rem  characters, please make sure to quote the variable.
set _WRAPPER_DIR=

rem The name and location of the Wrapper configuration file. This will be used
rem  if the user does not specify a configuration file as the first parameter to
rem  this script.
rem If a relative path is specified, please note that the location is based on the
rem location of the Wrapper executable.
set _WRAPPER_CONF_DEFAULT="../conf/%_WRAPPER_BASE%.conf"

rem Makes it possible to override the Wrapper configuration file by specifying it
rem  as the first parameter.
rem set _WRAPPER_CONF_OVERRIDE=true

rem _PASS_THROUGH controls how the script arguments should be passed to the
rem  Wrapper. Possible values are:
rem  - commented or 'false': the arguments will be ignored (not passed).
rem  - 'app_args' or 'true': the arguments will be passed through the Wrapper as
rem                          arguments for the Java Application.
rem  - 'both': both Wrapper properties and Application arguments can be passed to
rem            the Wrapper. The Wrapper properties come in first position. The
rem            user can optionally add a '--' separator followed by application
rem            arguments.
rem NOTE - If _WRAPPER_CONF_OVERRIDE is set to true the above applies to arguments
rem        starting with the second, otherwise it applies to all arguments.
rem set _PASS_THROUGH=app_args

rem Do not modify anything beyond this point
rem -----------------------------------------------------------------------------

Exécuter dans une console

Démarrer l'application

L'exécution de l'application dans une console (fenêtre de commande) peut se faire en double-cliquant sur le fichier batch MyApp.bat depuis l'explorateur de fichiers. Vous pouvez également le faire en ouvrant une fenêtre de commande et en exécutant le fichier batch depuis l'invite. En raison de la façon dont le script du Wrapper définit son répertoire courant, il n'est pas nécessaire d'exécuter ce fichier batch depuis le répertoire bin.

Exemple de sortie :
MyApp.bat
wrapper  | --> Wrapper Started as Console
wrapper  | Java Service Wrapper Professional Edition 64-bit {version}
wrapper  |   Copyright (C) 1999-{year} Tanuki Software, Ltd. All Rights Reserved.
wrapper  |     https://wrapper.tanukisoftware.com
wrapper  |   Licensed to {licensee}
wrapper  |
wrapper  | Launching a JVM...
jvm 1    | WrapperManager: Initializing...

Arrêter l'application

L'application peut être arrêtée en appuyant sur CTRL-C dans la console (fenêtre de commande). Cela amènera le Wrapper à arrêter l'application proprement. Pour plus d'options, veuillez consulter la page sur la façon d'arrêter une application console.

Exécuter en tant que service Windows

NOTE

Avant de continuer, veuillez vous assurer d'avoir configuré toutes les propriétés liées au service Windows dans le fichier wrapper.conf. Vous devez également avoir vérifié que l'application s'exécute correctement en mode console.

Installer en tant que service Windows

L'application peut être installée en tant que service en double-cliquant sur le fichier batch InstallMyApp-NT.bat depuis l'explorateur de fichiers. Cela peut également se faire en ouvrant une fenêtre de commande, puis en exécutant le script d'installation depuis l'invite de commande. Si le service est installé avec succès, le script se terminera immédiatement.

En cas de problème, un message d'erreur décrivant le problème s'affichera. Le script attendra ensuite que l'utilisateur appuie sur une touche avant de se terminer.

Exemple de commande et de sortie :
InstallMyApp-NT.bat
wrapper  | My Application service installed.

Démarrer et arrêter le service Windows

Le service peut maintenant être démarré et arrêté à l'aide des fichiers batch correspondants.

Exemple de commande et de sortie :
StartMyApp-NT.bat
wrapper  | Starting the My Application service...
wrapper  | My Application started.
StopMyApp-NT.bat
wrapper  | Stopping the My Application service...
wrapper  | My Application stopped.

Comme le service est un service Windows normal, vous pouvez également le démarrer et l'arrêter depuis le Panneau de configuration des services ([Panneau de configuration] - [Système et sécurité] - [Outils d'administration] - [Services]) sous Windows en sélectionnant le service, puis en cliquant sur le bouton « Démarrer le service ».

De plus, le service peut être contrôlé à l'aide des commandes net start MyApp et net stop MyApp.

Exemple de commande et de sortie :
net start MyApp
The My Application service is starting....
The My Application service was started successfully.
net stop MyApp
The My Application service is stopping..
The My Application service was stopped successfully.

NOTE

Les commandes net start x et net stop x rencontrent des problèmes avec les services qui mettent longtemps à démarrer ou à s'arrêter. Dans la plupart des cas, elles fonctionneront, mais si un service met plus de quelques secondes à s'arrêter, la commande net stop x indiquera que le service a été arrêté alors qu'il est encore en cours d'arrêt. Cela peut entraîner des problèmes lorsqu'un script doit attendre qu'un service soit réellement arrêté avant de continuer. En utilisant le Wrapper pour démarrer et arrêter le service, vous serez assuré de ne pas rencontrer de tels problèmes.

La méthode du Wrapper pour démarrer et arrêter le service est également utile dans les scripts. En effet, elle ne nécessite pas que le nom réel sous lequel le service est installé existe ailleurs que dans le fichier wrapper.conf. Cela élimine le besoin de modifier manuellement plusieurs fichiers si le nom du service est changé.

Si la propriété wrapper.ntservice.starttype est définie sur AUTO_START, le service sera démarré à chaque redémarrage de la machine.

Désinstaller (supprimer) le service Windows

Le service peut être désinstallé en exécutant le fichier batch UninstallMyApp-NT.bat. S'il est actuellement en cours d'exécution, il sera d'abord arrêté.

Exemple de commande et de sortie :
UninstallMyApp-NT.bat
wrapper  | Service is running.  Stopping it...
wrapper  | Waiting to stop...
wrapper  | My Application stopped.
wrapper  | My Application service removed.

Fichier batch basé sur des commandes

Certaines applications qui ont été portées depuis des systèmes d'exploitation basés sur UNIX peuvent mieux fonctionner avec un script de commandes de style UNIX pour contrôler le service. Le fichier batch basé sur des commandes combine toutes les fonctionnalités des fichiers batch dédiés individuels en un seul fichier, qui prend une commande en paramètre.

Mettre en place les fichiers batch

Lorsque vous consultez le dossier %WRAPPER_HOME%\src\bin de la distribution du Wrapper, vous verrez un fichier batch de commandes modèle, AppCommand.bat.in.

Copiez simplement ce fichier dans le dossier bin de votre application. Lorsque vous le faites, renommez le fichier en remplaçant App par le nom de votre application, et supprimez le .in à la fin.

Exemple de remplacement des noms de fichiers :
MyServerCommand.bat.in             -> MyServerCommand.bat
MyServer.bat.in   -> MyServer.bat

Le début de tous les fichiers contient une section qui peut être personnalisée pour s'adapter à la nomenclature des fichiers et à la structure des répertoires de votre application.

Bloc de configuration du script :
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
rem Optimized for use with version @wrapper.version@ of the Wrapper.

rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper

rem The name and location of the Wrapper configuration file.
rem  (Do not remove quotes.)
set _WRAPPER_CONF="../conf/wrapper.conf"

rem _FIXED_COMMAND tells the script to use a hard coded command rather than
rem  expecting the first parameter of the command line to be the command.
rem  By default the command will will be expected to be the first parameter.
rem set _FIXED_COMMAND=console

rem _PASS_THROUGH tells the script to pass all parameters through to the JVM
rem  as is.  If _FIXED_COMMAND is specified then all parameters will be passed.
rem  If not set then all parameters starting with the second will be passed.
set _PASS_THROUGH=true

rem Do not modify anything beyond this point
rem -----------------------------------------------------------------------------

Exécution du script

Le fichier batch basé sur des commandes est auto-documenté : si l'utilisateur tente de l'exécuter sans aucun paramètre, le script affichera son utilisation.

Utilisation avec _PASS_THROUGH activé :
Usage: TestWrapperCommand [ console {JavaAppArgs} : start : stop : restart : pause : resume : status : permissions : privileges : install {JavaAppArgs} : installstart {JavaAppArgs} : update {JavaAppArgs} : remove : setup : teardown ]

Commands:
  console      Launch in the current console.
  start        Start the Service.
  stop         Stop the Service.
  restart      Stop the Service if running and then start.
  pause        Pause the Service if running.
  resume       Resume the Service if paused.
  status       Query the current status of the Service.
  permissions  Query the current permissions of the Service.
  privileges   Query the current privileges of the Service.
  install      Install the Service.
  installstart Install the Service and then start running it.
  update       Update an installed Service.
  remove       Uninstall the Service.
  setup        Setup the Wrapper (for registration to the Windows Event Log).
  teardown     Teardown the Wrapper (unregister from the Windows Event Log).

JavaAppArgs:
  Optional arguments which will be passed to the Java application.
Utilisation avec _PASS_THROUGH désactivé :
Usage: TestWrapperCommand [ console : start : stop : restart : pause : resume : status : permissions : privileges : install : installstart : update : remove : setup : teardown ]

...

Il existe quelques différences entre ce fichier batch pour Windows et le script UNIX. Le script UNIX peut être utilisé pour arrêter le Wrapper s'exécutant dans une console ; cependant, cela n'est pas possible avec le fichier batch pour Windows. De plus, la commande dump est absente du fichier batch pour Windows.

Comme vous pouvez le constater, le fichier batch basé sur des commandes offre un large éventail de fonctionnalités :

À titre d'exemple, le Wrapper peut être démarré dans une console à l'aide de la commande suivante :

MyApp.bat console
wrapper  | --> Wrapper Started as Console
wrapper  | Java Service Wrapper Professional Edition 64-bit {version}
wrapper  |   Copyright (C) 1999-{year} Tanuki Software, Ltd. All Rights Reserved.
wrapper  |     https://wrapper.tanukisoftware.com
wrapper  |   Licensed to {licensee}
wrapper  |
wrapper  | Launching a JVM...
jvm 1    | WrapperManager: Initializing...

Pour exécuter d'autres commandes, remplacez simplement la commande « console » par la commande que vous souhaitez exécuter.

Binaire autonome

Le Java Service Wrapper peut également être exécuté directement sans utiliser de fichier batch.

Utilisation du Wrapper

Si l'exécutable wrapper est lancé sans aucun paramètre ou avec « -? », la sortie d'utilisation suivante s'affichera.

Utilisation du Wrapper :
Java Service Wrapper Professional Edition 64-bit {version}
  Copyright (C) 1999-{year} Tanuki Software, Ltd. All Rights Reserved.
    https://wrapper.tanukisoftware.com

Usage:
  bin\wrapper <command> <configuration file> [configuration properties] [...]
  bin\wrapper <configuration file> [configuration properties] [...]
     (<command> implicitly '-c')
  bin\wrapper <command>
     (<configuration file> implicitly 'wrapper.conf')
  bin\wrapper
     (<command> implicitly '-c' and <configuration file> 'wrapper.conf')
  bin\wrapper --customize [customize arguments]

where <command> can be one of:
  -c  --console run as a Console application
  -su --setup   SetUp the Wrapper
  -td --teardown TearDown the Wrapper
  -t  --start   starT an NT service
  -a  --pause   pAuse a running NT service
  -e  --resume  rEsume a paused NT service
  -p  --stop    stoP a started NT service
  -i  --install Install as an NT service
  -it --installstart Install and sTart as an NT service
  -u  --update Update an installed NT service
  -r  --remove  Uninstall/Remove as an NT service
  -l=<code> --controlcode=<code> send a user controL Code to a running NT service
  -d  --dump    request a thread Dump
  -q[=serviceName]  --query[=serviceName] Query the current status of the service
  -qs[=serviceName] --querysilent[=serviceName] Silently Query the current status of the service
  -qp[=serviceName] --querypermissions[=serviceName] Query Permissions of an installed NT service
  -qr[=serviceName] --queryprivileges[=serviceName] Query pRivileges of an installed NT service
  -h  --hostid  print a list of HostIds which can be used to license this host.
  -v  --version print the Wrapper's Version information
  -?  --help    print this help message
  -- <args>     mark the end of Wrapper arguments.  All arguments after the
                '--' will be passed through unmodified to the java application.

<configuration file> is the conf file to use.  Filename must be absolute or
  relative to the location of bin\wrapper.exe

[configuration properties] are configuration name-value pairs which override values
  in the Wrapper configuration file.  For example:
  wrapper.debug=true

  --customize This command will allow you to customize your Wrapper executable.
    The following [customize arguments] are available:
      --target <target file> Specifies the name and location of the customized
          Wrapper executable.  This property is mandatory as it is not possible
          or safe to guess a default file name.
      --icon <icon file> Specifies the custom icon for your Wrapper executable.
      --passthrough If set, the new Wrapper executable will precede the
                    whole command line to the wrapped application.
      --conf <conf file> Specifies the default location of the conf file
      --conf-optional Specifies if the configuration file is optional. To be
                      used when embedding configuration into the binary and the
                      configuration is sufficient for the Wrapper to execute.
      --manufacturer <Manufacturer> Sets the Manufacturer for the binary
      --properties-default <property list> Embed configuration into the binary.
      --properties-final <property list> Embed configuration into the binary
                         and prevent it from being overridden.
      --property-file-default <conf file> Embed configuration into the binary.
      --property-file-final <conf file> Embed configuration into the binary and
                            prevent it from being overridden.

  --cipher Obfuscate a password and generate a token along with wrapper.cipher.*
    properties that can then be used in the configuration file for added safety.
    The value to be encoded can be piped to Stdin of the Wrapper.  Otherwise, it
    will be prompted.
    The following arguments are available:
      --method <method name> One of the following methods:
          base64   : to encode in Base64
          base64url: to encode in the modified Base64 for URLs
          obf      : to generate a fixed obfuscated string
          robf     : to generate a random obfuscated string
      --name <cipher name> Optional cipher name. This argument is required when
        '--private_keyfile' is specified.
      --private_keyfile <file path> Optional path to a private key file
        (available for method 'obf' and 'robf').
      --encoding <utf8 or utf-8> Encoding to use when reading Stdin.
      --echo Echo the input to debug encoding issues (do not use with real
        passwords).
      --simple If specified, the output will only contain the obfuscated string.

  --keygen Generate a private key file to be used when obfuscating passwords.
    The following arguments are available:
      --method <method name> Obfuscation method for which the private key is
        intended to be used:
          obf : to generate a key for fixed obfuscation
          robf: to generate a key for random obfuscation
      --private_keyfile <file path> Specifies the filename of the key file.

  Please note that any file references must be absolute or relative to the location
  of the Wrapper executable.

Démarrer l'application

Pour exécuter le Wrapper en tant qu'application console, vous spécifieriez la commande -c, suivie du fichier wrapper.conf. L'emplacement du fichier wrapper.conf peut être un emplacement absolu ou relatif. Si un chemin relatif est utilisé, le chemin est toujours relatif à l'emplacement du fichier wrapper.exe, et non au répertoire courant.

Exemple de commande :
wrapper.exe -c ..\conf\wrapper.conf

Installer l'application en tant que service

Pour installer l'application en tant que service Windows, exécutez :

Exemple de commande :
wrapper.exe -i ..\conf\wrapper.conf

Démarrer l'application en tant que service

Une fois installé, le service peut être démarré comme n'importe quel autre service Windows. Si wrapper.ntservice.starttype a été défini sur AUTO_START lors de l'installation, le service sera démarré au prochain redémarrage de la machine. Il est également possible de démarrer le service depuis le Panneau de configuration des services ([Panneau de configuration] - [Système et sécurité] - [Outils d'administration] - [Services]) sous Windows en sélectionnant le service, puis en cliquant sur le bouton « Démarrer le service » ou à l'aide de l'une des commandes suivantes :

Exemple de commande :
wrapper.exe -t ..\conf\wrapper.conf
net start MyApp

NOTE

Les commandes net start x et net stop x rencontrent des problèmes avec les services qui mettent longtemps à démarrer ou à s'arrêter. Dans la plupart des cas, elles fonctionneront, mais si un service met plus de quelques secondes à s'arrêter, la commande net stop x indiquera que le service a été arrêté alors qu'il est encore en cours d'arrêt. Cela peut entraîner des problèmes lorsqu'un script doit attendre qu'un service soit réellement arrêté avant de continuer. En utilisant le Wrapper pour démarrer et arrêter le service, vous serez assuré de ne pas rencontrer de tels problèmes.

La méthode du Wrapper pour démarrer et arrêter le service est également utile dans les scripts, car elle ne nécessite pas que le nom réel sous lequel le service est installé existe ailleurs que dans le fichier wrapper.conf. Cela élimine le besoin de modifier manuellement plusieurs fichiers si le nom du service est changé.

Arrêter l'application en tant que service

Le service peut être arrêté à l'aide du Panneau de configuration des services ([Panneau de configuration] - [Système et sécurité] - [Outils d'administration] - [Services]) sous Windows en sélectionnant le service, puis en cliquant sur le bouton « Démarrer le service » ou à l'aide de l'une des commandes suivantes :

Exemple de commande :
wrapper.exe -p ..\conf\wrapper.conf
net stop MyApp

Désinstaller l'application en tant que service

Si vous souhaitez désinstaller l'application en tant que service Windows, exécutez la commande suivante :

Exemple de commande :
wrapper.exe -r ..\conf\wrapper.conf

Si le service est en cours d'exécution au moment de sa désinstallation, le service sera arrêté proprement puis supprimé.

Interroger l'état de l'application en tant que service

Le Wrapper peut être utilisé pour interroger l'état du service soit depuis la ligne de commande, soit depuis un fichier batch. Cela peut être utile pour les scripts d'installation qui ont besoin de connaître l'état actuel de la configuration du service.

Exemple de commande et de sortie :
wrapper.exe -q ..\conf\wrapper.conf
wrapper  | The My Application Service is installed.
wrapper  |   Start Type: Automatic
wrapper  |   Interactive: Yes
wrapper  |   Running: No

S'il est exécuté avec la commande « -q », le Wrapper affichera l' état actuel dans la console, la commande « -qs » s'exécutera silencieusement. Le Wrapper se terminera alors avec un code de sortie qui est une combinaison des bits suivants :

Un code de sortie de « 15 » (=1+2+4+8) (=0xf), par exemple, indique que le service est installé, en cours d'exécution, interactif et configuré pour démarrer automatiquement au démarrage du système. Un code de sortie de « 0 » (zéro) signifie que le service n'est pas actuellement installé.

Référence : Lancement de votre application avec le Wrapper