Je suis en train de trouver un mécanisme pour appeler un exe à partir de Java et en passant des paramètres spécifiques. Comment puis-je faire?
Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:", Arrays.toString(args));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
Le code précédent fonctionne. Mais je ne suis pas en mesure de transmettre des paramètres . MyExe.exe accepte les paramètres. Un autre problème est lorsque PathToExe a des espaces vides. ProcessBuilder semble ne pas fonctionner. Par exemple:
C:\\User\\My applications\\MyExe.exe
Merci.
java
exe
processbuilder
Lorenzo B
la source
la source
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
Cet extrait est-il utile pour les arguments d'option? Par exemple -h qui signifie aide et ainsi de suite ..-h
comme une option, un autre pourrait l'interpréter comme un nom de fichier.ProcessBuilder
ne sait ni ne s'en soucie. Re chemins avec des espaces: C'est l'une des raisons pour lesquelles les arguments sont donnés sous forme de chaînes discrètes plutôt que comme (disons) une liste délimitée par des espaces comme sur la ligne de commande et dans certaines API pauvres. Ajoutez des espaces là-dedans avec abandon, tout le chemin du programme sera donné au système d'exploitation pour le traiter comme il convient.Réponses:
Passez vos arguments dans le constructeur lui-même.
Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
la source
Vous êtes sur la bonne voie. Les deux constructeurs acceptent les arguments, ou vous pouvez les spécifier après la construction avec
ProcessBuilder#command(java.util.List)
etProcessBuilder#command(String...)
.la source
ProcessBuilder#command(java.util.List)
etProcessBuilder#command(String...)
owerwrite toutes les commandes existantes spécifiées via le constructeur (à mon avis, ce n'est pas très clair dans la documentation).import java.io.IOException; import java.lang.ProcessBuilder; public class handlingexe { public static void main(String[] args) throws IOException { ProcessBuilder p = new ProcessBuilder(); System.out.println("Started EXE"); p.command("C:\\Users\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"); p.start(); System.out.println("Started EXE"); } }
la source
Ci-dessous fonctionne pour moi si votre exe dépend d'une DLL ou d'une certaine dépendance, vous devez définir le chemin du répertoire. Comme mentionné ci-dessous exePath signifie dossier où exe est placé avec ses fichiers de références.
Application Exe créant n'importe quel fichier temporaire afin qu'il crée dans le dossier mention dans processBuilder.directory (...)
**
ProcessBuilder processBuilder = new ProcessBuilder(arguments); processBuilder.redirectOutput(Redirect.PIPE); processBuilder.directory(new File(exePath)); process = processBuilder.start(); int waitFlag = process.waitFor();// Wait to finish application execution. if (waitFlag == 0) { ... int returnVal = process.exitValue(); }
**
la source