Définir le nom du processus Java sous Windows

Notre application Java Swing est exécutée sous Windows et intégrée dans un fichier exe utilisant Launch4J.

Nous aimerions personnaliser le nom et la description de notre processus d’application (dans le gestionnaire de tâches de Windows), car il s’agit actuellement de javaw.exe” et de “binary Java Platform SE” (ce qui est déroutant pour nos clients).

Alors que les anciennes versions de Launch4J permettaient de changer cela à l’aide de , cette option est désormais obsolète car elle ne fonctionne plus à partir de Win7.

Existe-t-il une autre solution (simple) pour personnaliser le nom et la description de notre processus d’application?

Par exemple, changer le nom de fichier exécutable de javaw.exe semble être une approche (comme nous l’incorporons dans le fichier exe enveloppé) mais comment alors indiquer à launch4j que le nom du fichier jvm a changé?

Une autre option pourrait être de créer un fichier exe de lanceur: peut-être un overkill?

Toutes les idées / conseils sont plus que bienvenus; Merci!

Si vous cherchez à déployer votre propre solution, vous allez vouloir regarder JNI et l’ API d’invocation en particulier JNI_CreateJavaVM() qui est utilisée pour créer une machine virtuelle, trouver la méthode principale GetStaticMethodID() et l’appeler avec CallStaticVoidMethod .

C’est ce que font java.exe , javaw.exe et divers autres lanceurs natifs en interne. Quelques exemples incluent:

  • OpenJDK java.c
  • IntelliJ WinLauncher.cpp
  • WinRun4J VM.cpp

Si vous ne souhaitez pas intégrer un système de génération natif à votre système de compilation java, une approche consiste à créer un fichier launcher.exe statique à l’avance et à le traiter comme un object blob statique. Ensuite, pendant votre build Java, modifiez le blob binary en utilisant Java, pour mettre à jour VERSIONINFO , l’icône et l’écran de démarrage. Un exemple de cette approche peut être vu dans IntelliJ LauncherGeneratorMain.java

Si vous pouvez vous le permettre, JSmooth semble faire ce dont vous avez besoin. Il est sorti en 2007 cependant. Une note sur sa licence prise depuis l’application elle-même:

L’exécutable généré (les lanceurs créés par JSmooth) est sous la licence LGPL avec une “exception d’exécution” similaire à celle de la licence gcc: il n’est pas nécessaire de dissortingbuer le code source avec lui, ni de publier un avis mentionnant jsmooth.

Lorsque vous utilisez JSmooth, il existe une section intitulée “Skeleton” qui vous permet de sélectionner des parameters prédéfinis. L’un d’entre eux est un “wrapper Windowed” adapté aux applications graphiques décrites ci-dessous:

Ce squelette encapsule les applications graphiques .

  • Aucune E / S de console n’est affichée
  • Si aucune machine virtuelle Java n’est trouvée, il est possible d’afficher une URL configurable (généralement sur une page de téléchargement Java).

Les arguments peuvent être transmis à l’application (utilisez le mécanisme d’argument par défaut JSmooth ou créez un raccourci avec des arguments).

L’important dans ce squelette est de cocher l’option “Lancer l’application java dans le processus exe”, ce qui entraîne l’exécution de la machine virtuelle Java dans le même processus que l’exécutable wrapper. Cela signifie que seul l’exe est affiché dans le Gestionnaire des tâches Windows, par opposition au processus exe et java.

L’alternative est d’écrire votre propre wrapper. Consultez ce guide Oracle pour savoir comment appeler la machine virtuelle Java depuis une application native.

J’ai fait des choses similaires avec WinRun4J , autant que je me souvienne, il peut être utilisé commercialement car il est licencié CPL. Vérifié cela aujourd’hui: parameters le nom du processus fonctionne toujours (initialement fait sur XP) avec Windows 7.

Selon le site Web, vous créez simplement un fichier ini qui indique à WinRun4J quoi exécuter:

 main.class=org.something.MyMainClass classpath.1=*.jar 

(il y a beaucoup plus de parameters, vous pouvez définir où JRE peut être trouvé et plus)

Dans un deuxième temps, vous copiez le fichier winrun4j.exe dans un fichier correspondant à votre application:

 copy winrun4j.exe yourapplication.exe 

(Il existe également une version pour Windows x64)

Ensuite, vous avez RCEDIT (fourni avec WinRun4j) append l’ini à l’exe:

 rcedit /N yourapplication.exe yourapplication.ini 

Cela semble assez ancien et ne vaut pas vraiment la peine, mais cela peut aussi être ce que vous recherchez: Java Exe Maker .