Java-Programmierung: Rufen Sie eine Exe von Java auf und übergeben Sie Parameter


87

Ich finde einen Mechanismus heraus, um eine Exe aus Java aufzurufen und bestimmte Parameter zu übergeben. Wie kann ich?

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);
}

Der vorherige Code funktioniert. Aber ich kann keine Parameter übergeben . MyExe.exe akzeptiert Parameter. Ein weiteres Problem besteht darin, dass PathToExe Leerzeichen enthält. ProcessBuilder scheint nicht zu funktionieren. Beispielsweise:

C:\\User\\My applications\\MyExe.exe

Danke dir.


1
neuer ProcessBuilder ("C: \\ PathToExe \\ MyExe.exe", "param1", "param2"). start ();
Prinz John Wesley


1
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();Ist dieses Snippet für Optionsargumente wertvoll? Zum Beispiel -h das steht für Hilfe und so weiter ..
Lorenzo B

Was ist mit Pfaden mit Leerzeichen? Danke nochmal. Sehr hilfreich!!
Lorenzo B

3
@Flex: Ein Argument ist ein Argument. Die Bedeutung des Arguments hängt ganz vom ausgeführten Programm ab. Ein Programm könnte -hals Option interpretiert werden, ein anderes als Dateiname. ProcessBuilderweder weiß noch kümmert. Re-Pfade mit Leerzeichen: Dies ist einer der Gründe, warum Argumente als diskrete Zeichenfolgen und nicht als durch Leerzeichen getrennte Liste wie in der Befehlszeile und in einigen schlechten APIs angegeben werden. Wenn Sie Leerzeichen mit Verzicht hineinwerfen, wird der gesamte Programmpfad an das Betriebssystem übergeben, um ihn entsprechend zu behandeln.
TJ Crowder

Antworten:




0
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"); 
    }
}

1
Wo kann man Argumente setzen?
Mert Serimer

1
@ Shikha bitte gehen Sie die Frage durch
Anand j. Kadhi

0

Wenn Ihre Exe von einer DLL oder einer bestimmten Abhängigkeit abhängt, müssen Sie den Verzeichnispfad festlegen. Wie unten erwähnt, bedeutet exePath den Ordner, in dem exe zusammen mit den Referenzdateien abgelegt ist.

Exe-Anwendung, die eine temporäre Datei erstellt, damit sie in einem Ordner erstellt wird, der in processBuilder.directory erwähnt wird (...)

** **.

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();
} 

** **.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.