Executer un executable externe en Java [2017] [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
mercredi 19 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2017
-
Messages postés
16042
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
29 septembre 2020
-
Bonjour/Bonsoir,

je cherche à lancer une application externe avec du code Java, l'app se lance dans le Gestionnaire de taches mais n'apparait pas.
Voici le code que j'utilise (qui est faux je pense):

try {
String[] cmdAndArgs = new String[]{"cmd", "/c", "path"};
Runtime.getRuntime().exec(cmdAndArgs);
}
catch (Exception e) {
e.printStackTrace();
}

2 réponses

Messages postés
16042
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
29 septembre 2020
2 682
Bonjour,

Pas besoin de "cmd /c" fait juste ta commande "path"

Remarque : si tu es censé récupérer un affichage il faut rediriger les flux.
Messages postés
7
Date d'inscription
mercredi 19 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2017

Donc il n'est pas possible de démarrer un programme sans passer par le cmd ?
Messages postés
16042
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
29 septembre 2020
2 682 >
Messages postés
7
Date d'inscription
mercredi 19 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2017

Et comment tu en arrives à cette conclusion !? Ce n'est pas du tout ce que j'ai dit...
Au contraire, j'ai dit que le "cmd /c" tu n'en avais pas besoin, il faut juste lancer le programme directement via l'exec et si besoin récupérer l'objet processus pour manipuler ses flux au cas où le programme lancé soit un programme console.
Messages postés
7
Date d'inscription
mercredi 19 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2017

Sans le "cmd /c" il y a des erreurs :

CreateProcess error=740, L’opération demandée nécessite une élévation


at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:485)
at project4.Main.jLabel3MouseClicked(Main.java:250)
at project4.Main.access$600(Main.java:29)
at project4.Main$6.mouseClicked(Main.java:142)
at java.awt.Component.processMouseEvent(Component.java:6536)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.io.IOException: CreateProcess error=740, L’opération demandée nécessite une élévation
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 36 more
Messages postés
16042
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
29 septembre 2020
2 682
Ça c'est une erreur Windows lié au contrôle de compte utilisateur, si ton programme cible requiert des droits d'administration, il faut exécuter ton programme Java avec les même droits, le processus créé par la méthode exec devrait hériter de ces droits.
Messages postés
7
Date d'inscription
mercredi 19 juillet 2017
Statut
Membre
Dernière intervention
19 juillet 2017

Avec les droits tout se lance mais rien n'apparait à l'écran, je crois que je vais passer par :

String[] cmdAndArgs = new String[]{ "cmd", "/c", "path" };
Runtime.getRuntime().exec(cmdAndArgs);


Même si tout ne marche pas correctement, je te remercie énormément pour toutes les réponses que tu as fournis, merci :) !
Messages postés
13
Date d'inscription
mercredi 19 juillet 2017
Statut
Membre
Dernière intervention
22 juillet 2017

Même si il le sujet est résolu il y a quelque chose de plus simple :

Desktop.getDesktop().open((new File("path")));
Messages postés
16042
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
29 septembre 2020
2 682
Cela dépend en fait de ce que l'on veux faire...

Runtime.exec est fait pour démarrer un programmer et interagir avec, en lui passant des paramètres, en récupérant les flux d'entrée/sortie, attendre la fin du processus, etc.

Desktop.open est fait pour ouvrir un fichier, ça l'ouvre avec le programme par défaut configuré sur le système d'exploitation (donc pas forcément celui qu'on voudrait)