Javaservice ou javaexe

Fermé
amizmiz - 22 juil. 2008 à 13:55
lolveley Messages postés 88 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 21 octobre 2014 - 21 oct. 2014 à 16:08
Bonjour,
Est ce qu'il faut changer toutes les classes pour lancer le service en utilisant javaexe.
ou il y a une methode plus simple.
Apres avoir lu les docs, j'ai pas bien compris comme utiliser javaexe, malgré qu'il est simple de crée un .exe mais un service je vois pas comment. comment exploiter javaexe pour créer un service windows?

3 réponses

bonjour,

c'est très simple de créer un service windows avec JavaExe.

tu n'as pas besoin de tout réécrire, il te suffit de créer une classe supplémentaire portant le même nom que ta classe principale et se terminant par "_ServiceManagement".
Exemple : si ta classe principale s'appelle "MaClasse" alors tu dois créer une classe nommée "MaClasse_ServiceManagement".

C'est dans cette classe que tu contrôlera l'exécution du service (init, run, pause, stop, ...) et que tu appellera tes classes et méthodes de ton appli pour le traitement proprement dit.

réfère toi aux exemples fournis avec JavaExe : http://devwizard.free.fr/download/JavaExe%20-%20doc.zip

n'hésite pas à me dire si tu as encore des soucis.


DwzR
7
bonjour

ce post date (2008!) mais pour moi javaexe est nouveau, j'ai lu la doc mais je ne comprends pas le passage concernant l'appel d'une appli java en tant que service.il est dit (fichier : http://devwizard.free.fr/download/JavaExe%20-%20doc.zip) que :
- il y a 2 points d'accès pour lancer le programme : main() ou méthodes de l'interface. ça je comprends.
- pour chaque point d'accès précédent, il y a 2 moyens d'appeler le programme : JVM ou java.exe.

ce que je voudrais, c'est lancer mon programme sous forme de service, qui apparaisse dans le gestionnaire de services de windows, qui se lance automatiquement au démarrage de windows.
pour cela, je crois (à confirmer) qu'il faut utiliser la méthode "interface + JVM".

mais comment faire pour que windows appelle la JVM? et comment faire cela manuellement, à propos?car avec un jar je ne sais que lancer une classe contenant le méthode main...

donc pour résumer mon souci est d'appeler les méthodes de gestion de service à partir de windows (gestionnaire de services).

merci pour toute aide,

olivier
0
avec JavaExe cela se fait tout simplement, regarde les exemples fournis avec JavaExe :
http://devwizard.free.fr/download/JavaExe.zip

Notamment les exemples 3, 5 et 8

JavaExe passera tjrs par la JVM pour appeler tes méthodes du service
S'il n'arrive pas à créer une JVM, il lancera l'appli par java.exe et dans ce cas c'est le main() qui sera appelé...
Mais tu n'a même pas à te soucier de ca
0
...j'oubliais : tu dois seulement créer un fichier .properties portant le même nom que le .exe et y mettre dedans "RunType = 1" pour signaler à JavaExe que ton appli est un service

mais tout ceci est expliqué dans la doc et dans les exemples.
0
ok merci pour votre réponse très rapide.

je jette un oeil et poserai des questions ici si quelque chose ne va pas.
0
bon, ça marche pas.

voici ce que j'ai fait:
- création d'une classe java dans eclipse: voir http://pastebin.com/ch0Q4DFB
- décompression du zip de javaexe
- copie du jar (runnable jar) créé à partir d'eclipse
- changement du nom des fichiers comme dit dans le tuto
- changement du fichier properties en :

*****************
JREversion =1.7
RunType =1
Display_BoxInstall =1
*****************
mais quand je lance "prod1.exe" (prod1 c'est le nom que j'ai choisi) le service est bien lancé mais la fenêtre n'apparaît pas, et si le service apparaît dans la fenêtre des services, je ne peux rien faire : pas d'arrêt, pas de redémarrage, pas de suppression. même pas manuellement (prod1 -stopService).

peux-tu m'aider?
0
Il y a une chose à bien comprendre sur les Services tournant sous Windows : ils ne peuvent pas, par défaut, interagir avec le Bureau. Donc pas de fenêtre ou autres boîtes de dialogue.

Avec JavaExe tu peux néanmoins créer un service interactif en passant par la gestion de la barre des tâches. Pour se faire tu dois créer une classe ZZZ_TaskbarManagement, où ZZZ est le nom de ta classe principale.

Et toute la partie interactive de ton service doit se trouver uniquement dans ZZZ_TaskbarManagement.

Ceci est expliqué dans la doc, pages 21-22 et page 34, ainsi que dans les exemples 5 et 8


Ensuite, tes System.out.println() ne marcheront pas puisque tu ne peux pas lancer un service en mode console (page 19, 2me paragraphe).
Tu dois envoyer tes sorties vers un fichier.
0
re-bonjour

il y a plusieurs choses qui ne vont pas :

1) ta classe appli ne peut pas afficher une boîte de dialogue puisqu'elle est lancée depuis le service. Tes DialogBox doivent être affichée depuis le taskbarManagement (ou d'autres classes mais appelées de toute façon depuis le taskbar). Ces DialogBox peuvent être déclenché par un message reçu du service...

2) assure-toi que toutes les classes ou interfaces utilisées soient accessibles. S'il y a plusieurs .jar, mets-les dans un répertoire nommé "resource". Pour l'instant ce n'est pas le cas d'où tes pb 1/ et 2/

et enfin, c'est normal que l'accès aux services soient restreint à l'admin et n'a pas de lien avec les pb exposés.
0
lolveley Messages postés 88 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 21 octobre 2014 1
10 nov. 2012 à 21:57
j'ai un point positif : depuis eclipse, j'ai exporté les sources dans un répertoire "resource" et l'icône s'affiche bien.
2e point positif : j'arrive arrêter le service, mais cette procédure d'arrêt ne marche pas bien, car l'icône ne disparaît pas; juste si je clique dessus le menu s'affiche mais n'a plus d'effet.
comment puis-je supprimer l'icône?

merci au fait!
0
Comment arrêtes-tu le service ?
si tu l'arrêtes avec un "sc stop xxxxx" sous DOS admin, l'icône disparaitra
mais effectivement, avec un "taskkill" l'icône reste.
0
lolveley Messages postés 88 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 21 octobre 2014 1
10 nov. 2012 à 23:19
eh bien en fait j'ai réussi en envoyant un message du service vers le gestionnaire de barre des tâches, et dans ce gestionnaire la fonction taskDataFromService lance un System.exit(0).
mais cela n'arrête pas le service?...
0
lolveley Messages postés 88 Date d'inscription dimanche 22 avril 2007 Statut Membre Dernière intervention 21 octobre 2014 1
10 nov. 2012 à 23:51
bon, je vais aller me coucher, mais je voudrais savoir si tu connais une façon pour que le programme s'arrête de lui-même, l'icône et le service, en cliquant sur un des menus de l'icône.
0
soit tu lances le "sc stop xxxxx" depuis le service après réception d'un message du taskbar (ca marche avec l'exemple5)

soit :
1) tu envoie un message du service vers le taskbar pour signifier à ce dernier qu'il doit se faire un exit(0);
2) ensuite tu Sleep(1000) après que le message soit parti vers le taskbar et tu exit(0) le service, ou à la place du exit(0) tu relances launcher.exe avec en arg -stopService : "Launcher.exe -stopService"

dans la prochaine version de JavaExe (prévue pour début 2013) il sera possible de manager depuis Java n'importe quel service (comme dans le service manager de windows)
0