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
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
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
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
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
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
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
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
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?
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?
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.
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.
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.
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.
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
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!
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!
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
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?...
mais cela n'arrête pas le service?...
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
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.
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)
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)