Frage Java-Programmierung: Rufe eine exe von Java auf und übergebe Parameter


Ich überlege mir einen Mechanismus, um eine exe von 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 Parameter nicht übergeben. MyExe.exe akzeptiert Parameter. Ein anderes Problem ist, wenn PathToExe Leerzeichen enthält. ProcessBuilder scheint nicht zu funktionieren. Beispielsweise:

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

Vielen Dank.


75
2018-04-09 11:19


Ursprung


Antworten:


Übergeben Sie Ihre Argumente im Konstruktor selbst.

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();

104
2018-04-09 11:31



Du bist auf dem richtigen Weg. Das zwei  Konstruktoren Akzeptieren Sie Argumente, oder Sie können sie nach der Konstruktion mit angeben ProcessBuilder#command(java.util.List) und ProcessBuilder#command(String...).


7
2018-04-09 11:25



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

0
2017-09-15 04:23



Unten funktioniert für mich, wenn Ihre exe von einer DLL oder bestimmte Abhängigkeit abhängen, dann müssen Sie den Verzeichnispfad festlegen. Wie unten erwähnt, bedeutet "exePath mean folder", wo exe zusammen mit den zugehörigen Verweisen platziert wird.

Exe-Anwendung erstellt eine temporäre Datei, so dass sie in der Ordner-Erwähnung in processBuilder.directory (...) erstellt 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();
} 

**


0
2017-10-07 07:46