IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NetBeans Java Discussion :

[Visual Web] Comment lancer une application .bat à travers un bouton


Sujet :

NetBeans Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Comment lancer une application .bat à travers un bouton
    salut , je n'arrive pas a faire executé une application externe a travers un boutton dans ma paje jsp.
    esque je peut utiliser cette class runtime .
    g mit ca dans le champs d'action de proprité de mon boutton .

    Runtime runtime = Runtime.getRuntime();
    runtime.exec(new String[] { "C:\\Program Files\\MonAppli\coppercore.bat" } );

    mais ca na pas marché , esque qlq peut m'aider la dessus merci

    merci d'avance.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    runtime.exec ne peut lancer que des process executables (.exe). Il ne sait pas lancer un .bat, .cmd, .vbs ou autre.

    ==> il faut executer la commande "cmd.exe /C xxxx.bat" (%COMSPEC%)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String[] cmd = new String[3];
    cmd[0] = "cmd.exe" ;
    cmd[1] = "/C" ;
    cmd[2] = "C:\\Program Files\\MonAppli\\coppercore.bat"; // 2 backslash ! :-)
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(cmd);

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    ok merci pour votre réponse
    thank you.

  4. #4
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Par ailleurs, lire ce petit tuto ne peut faire que du bien.

    Valère

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    merci valered sayé g résolue le problem , merci pour le tuto .

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par pseudocode
    runtime.exec ne peut lancer que des process executables (.exe). Il ne sait pas lancer un .bat, .cmd, .vbs ou autre.

    ==> il faut executer la commande "cmd.exe /C xxxx.bat" (%COMSPEC%)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String[] cmd = new String[3];
    cmd[0] = "cmd.exe" ;
    cmd[1] = "/C" ;
    cmd[2] = "C:\\Program Files\\MonAppli\\coppercore.bat"; // 2 backslash ! :-)
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(cmd);
    Bonjour Pseudocode

    J'ai essayé ce code et il marche bien avec des fichiers en windows. Merci

    J'aimerais faire la même chose mais sur unix. Je veux exécuter un script shell à partir d'un bouton. Qu'est-ce qu'il faut enlever et ajouter du code ci-dessous.

    Merci

  7. #7
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Bonjour Diamonds,

    Il suffit de l'adapter aux usages d'Unix:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String[] cmd = new String[3];
    cmd[0] = "myScript.sh" ;
    cmd[1] = "argument1" ;
    cmd[2] = "/ce/chemin/est/mon/argument2";
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(cmd);
    Bien s'assurer que myScript.sh est exécutable!

    Valère

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par valered
    Bonjour Diamonds,

    Il suffit de l'adapter aux usages d'Unix:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String[] cmd = new String[3];
    cmd[0] = "myScript.sh" ;
    cmd[1] = "argument1" ;
    cmd[2] = "/ce/chemin/est/mon/argument2";
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(cmd);
    Bien s'assurer que myScript.sh est exécutable!

    Valère
    Ok merci Valère, je vais l'essayer.

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par diamonds
    Ok merci Valère, je vais l'essayer.
    Je l'ai essayé et ca ne marche pas. pas d´erreur, mais pas d'envoi de résultat de mon script.

    j'ai un seul argument et voici le corps du code central

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String[] cmd = new String[2];
    cmd[0] = "/usr/toto.sh" ; 
    cmd[1] = "argument 1";
    Si on ne met pas le chemin pour l'argument 1, est-ce que Tomcat ne va pas le placer automatiquement comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /usr/toto.sh argument1
    Faut-il mettre un double slash au niveau du chemin comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cmd[0] = "//usr//toto.sh" ;
    il me semble que le paramètre argument ne doit pas avoir de chemin qui le précède car, ce chemin est déjà mentioné dans cmd[0]

  10. #10
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Bonjour Diamonds,

    Il y a eu sur ce thème un très intéressant billet de d'adiGuba sur son blog, je pense qu'il peut t'ouvrir quelques pistes.

    Concernant la méthodologie à employer, il faudrait:
    • trouver la ligne de commande qui lance corrctement ton script
    • écrire un tout petit programme J2SE qui ne fait rien d'autre que lancer ton script.
    • une fois cette maquette ok, copier le code dans ton appli.


    Je vois juste 2 problèmes possibles en passant de la 2ème à la 3ème étape:
    • Attention au compte avec lequel tomcat est lancé! a-t'il les droits nécessaires pour exécuter ton script?
    • Attention aux chemins relatifs, tu ne connais pas forcément le répertoire de travail de Tomcat.


    Valère

  11. #11
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par valered
    Bonjour Diamonds,

    Il y a eu sur ce thème un très intéressant billet de d'adiGuba sur son blog, je pense qu'il peut t'ouvrir quelques pistes.

    Concernant la méthodologie à employer, il faudrait:
    • trouver la ligne de commande qui lance corrctement ton script
    • écrire un tout petit programme J2SE qui ne fait rien d'autre que lancer ton script.
    • une fois cette maquette ok, copier le code dans ton appli.
    Je vois juste 2 problèmes possibles en passant de la 2ème à la 3ème étape:
    • Attention au compte avec lequel tomcat est lancé! a-t'il les droits nécessaires pour exécuter ton script?
    • Attention aux chemins relatifs, tu ne connais pas forcément le répertoire de travail de Tomcat.
    Valère
    J'ai lu le billet mais je n'arrive toujours pas à régler le problème. En fait à moitié.

    Lorsque je vais directement sur la ligne de commande de unix et je tape le nom du script shell avec ses arguments, le script s'exécute bien et donne le résultat escompté.

    Mais lorsque je lance ce script à partir de mon appliction java, il s'exécute à moitié. Comment je le sais ? c'est parce que j'ai mis l'envoi de deux emails dans ce script comme ça:
    email1
    traitement
    email2
    Je recois que l'email 1 mais pas le deuxième.

    voici comment j'ai lançé mon script à partir de l'application java :
    avec le -c et sans le -c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String[] cmdarray = {"/bin/sh -c", "/usr/rep1/script_1", argument1, argument2};
    Process process = Runtime.getRuntime().exec(cmdarray);
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String[] cmd = new String[5];
    cmd[0] = "/bin/sh";
    cmd[1] = "/usr/rep1/script_1";
    cmd[2] = "-c"; 
    cmd[3] = argument1 ; 
    cmd[4] = argument2;
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(cmd);
    J'ai mis rwx pour le owner, le groupe, et les autres.

    le script_1 a comme username (le mien)

    tous le fichiers de l'application qui a été déployée ont comme username tomcat et rwx pour les permissions.

    Y a t-il autre chose que j'ai manquée ?

    Merci.

  12. #12
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Est ce que le script se termine bien et est-ce qu'il rend bien la main? S'il ne fait que la moitié du boulot, c'est parce qu'il se termine de manière inappropriée ou qu'il reste bloqué quelque part?

    J'ai déjà vu des cas d'appels à des scripts depuis java qui se bloquaient en cours d'éxecution suite à des problèmes de lecture des flux stderr et sdtout... As-tu vérifié leur contenu?

    Val

  13. #13
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par valered
    Est ce que le script se termine bien et est-ce qu'il rend bien la main? S'il ne fait que la moitié du boulot, c'est parce qu'il se termine de manière inappropriée ou qu'il reste bloqué quelque part?

    Val
    Lorsque je lance le script directement du prompt de unix (telnet), il marche bien et il rend bien la main.
    Mais lorsque je le lance à partir de l'application java, là il m'envoi le premier email (ca veut dire que le travail a commençé) mais le traitement qui est sensé faire ne se fait pas du tout.

    Pour ce script, j'ai juste à le lancer. mon application java n'utilise pas les sorties de ce script. Il ne fait que produire des fichiers dans le serveur unix. Mon application java n'attends rien en retour (sauf bien sur qu'il soit bien déroulé).

    Citation Envoyé par valered
    J'ai déjà vu des cas d'appels à des scripts depuis java qui se bloquaient en cours d'éxecution suite à des problèmes de lecture des flux stderr et sdtout... As-tu vérifié leur contenu?

    Val
    Comment puis-je vérifier ceci ? est-ce que je rajoute une commande du style ..... > toto.txt aprés les arguments ?

  14. #14
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par valered
    Est ce que le script se termine bien et est-ce qu'il rend bien la main? S'il ne fait que la moitié du boulot, c'est parce qu'il se termine de manière inappropriée ou qu'il reste bloqué quelque part?

    J'ai déjà vu des cas d'appels à des scripts depuis java qui se bloquaient en cours d'éxecution suite à des problèmes de lecture des flux stderr et sdtout... As-tu vérifié leur contenu?

    Val
    Je viens de découvrir autre chose mais je n'ai pas de réponse encore.

    C'est que l'application java utilise l'utilisateur "tomcat" pour exécuter le script shell.

    Je suis allé vérifier sur le prompt du système unix mais cette fois-ci en se logant directement avec l'utilisateur "tomcat". dans ce cas le script ne s'exécute pas bien (juste à moitié, comme faisait mon application).

    je me suis déconnecter de tomcat et je me suis reconnecter mais cette fois-ci avec mon username personnel, et dans ce cas le script s'exécute bien.

    ceci veut, que sans parler de l'application java, c'est l'utilisateur tomcat qui ne peut pas exécuter mon script shell, mais mon username personnel lui il peut.

    question : peut-être qu'il faut changer quelques choses dans le profil de tomcat pour lui donner les même droit que mon profil personnel.

    par exemple le fichier .cshrc ou autre chose.

    qu'est ce que vous en pensez ?

  15. #15
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Il faut que tu débugges ton script avec l'user tomcat pour vérifier où il bloque, et adapter les droits en conséquence. C'est du ressort (un peu) de ton admin solaris...

    Val

    PS: pour le problème d'user utilisé par tomcat: http://www.developpez.net/forums/sho...4&postcount=10

  16. #16
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par valered
    Il faut que tu débugges ton script avec l'user tomcat pour vérifier où il bloque, et adapter les droits en conséquence. C'est du ressort (un peu) de ton admin solaris...

    Val

    PS: pour le problème d'user utilisé par tomcat: http://www.developpez.net/forums/sho...4&postcount=10
    ok maintenant sur la ligne de commande, avec l'utilisateur tomcat, le script marche bien.
    mais celui lancer de mon application java reste toujours non fonctionnel.
    j'ai créer un projet J2SE ou j'ai mis le code pour lancer une application externe mais après la compliation je ne sais pas comment le déployer sur le serveur unix (où se trouve tomcat). parce que le menu de tomcat manager ne prends pas un fichier.jar.

    j'ai l'option suivante mais je ne sais pas comment faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Context Path (optional): 
    XML Configuration file URL: 
    WAR or Directory URL: 
     
    WAR file to deploySelect WAR file to upload

  17. #17
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par valered
    Bonjour Diamonds,

    • trouver la ligne de commande qui lance corrctement ton script
    • écrire un tout petit programme J2SE qui ne fait rien d'autre que lancer ton script.
    • une fois cette maquette ok, copier le code dans ton appli.

    Je vois juste 2 problèmes possibles en passant de la 2ème à la 3ème étape:
    • Attention au compte avec lequel tomcat est lancé! a-t'il les droits nécessaires pour exécuter ton script?
    • Attention aux chemins relatifs, tu ne connais pas forcément le répertoire de travail de Tomcat.

    Valère
    comment fais t-on pour connaitre le répertoire de travail de tomcat ?

    comment dois-je faire pour savoir le compte avec lequel tomcat est lançé ?

    Merci.

  18. #18
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Pour ta seconde question, tu le sais déjà puisque visiblement tu as un compte tomcat.

    Pour la première question, fait tes appels à ton script avec des chemins absolus et tout ira bien. Au vu des messages précédents, l'appel à ton code depuis java fonctionne bien, par contre tu as un problème de droit.

    Il faut que tu débugge ton script en le lançant avec l'utilisateur tomcat, il n'y a pas de mystère. Tu dois passer à un moment ou un autre dans un fichier ou tu n'as pas les droits, ou bien faire appel à une fonction qui n'est pas dans le path.

    Typiquement, tu ne résoudras pas ce problème en demandant de l'aide sur le forum, il faut bien à un moment ou un autre mettre les mains dans le cambouis. Rajouttes des messages de debug pour suivre la progression du script.

    Valère

  19. #19
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par valered
    Pour ta seconde question, tu le sais déjà puisque visiblement tu as un compte tomcat.

    Pour la première question, fait tes appels à ton script avec des chemins absolus et tout ira bien. Au vu des messages précédents, l'appel à ton code depuis java fonctionne bien, par contre tu as un problème de droit.

    Il faut que tu débugge ton script en le lançant avec l'utilisateur tomcat, il n'y a pas de mystère. Tu dois passer à un moment ou un autre dans un fichier ou tu n'as pas les droits, ou bien faire appel à une fonction qui n'est pas dans le path.

    Typiquement, tu ne résoudras pas ce problème en demandant de l'aide sur le forum, il faut bien à un moment ou un autre mettre les mains dans le cambouis. Rajouttes des messages de debug pour suivre la progression du script.

    Valère
    je ne sais pas si tu me comprends. c'est que je n'ai pas de EDI dans le serveur unix, et l'application une fois déployée sur unix, je ne sais pas par où l'attraper. les fichiers log du répertoire /usr/var/log ne contienent pas d'erreurs.

  20. #20
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Il ne faut pas toucher à java, donc à l'EDI, tant que ton script ne fonctionne pas parfaitement avec l'user tomcat. Au lieu de te connecter avec ton user diamonds sur le serveur solaris, il faut que tu te logues avec le user spécifique de tomcat. Et là tu lances exactement les mêmes commandes que ce que fait ton appli:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /bin/sh -c /usr/rep1/script_1 argument1 argument2
    Val

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment lancer une applic en spécifiant Xmx=512M ?
    Par lr dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 05/06/2007, 15h48
  2. Réponses: 9
    Dernier message: 26/04/2007, 01h44
  3. [VB.NET] Comment lancer une application externe dans ma Form
    Par afdmats dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/10/2006, 16h27
  4. Comment lancer une application qui a été développée sous Unix avec le navigateur IE
    Par diamonds dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 26/09/2006, 15h43
  5. Réponses: 11
    Dernier message: 25/05/2006, 12h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo