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.

Lorenzo B.
quelle
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:

118

Übergeben Sie Ihre Argumente im Konstruktor selbst.

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
Prinz John Wesley
quelle
Was ist, wenn sich die ausführbare Datei in der Jar-Datei befindet?
t4d_
@Jungs. Bitte helfen Sie bei der Lösung von stackoverflow.com/questions/43050217/…
gstackoverflow
7

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

TJ Crowder
quelle
Zur Verdeutlichung: ProcessBuilder#command(java.util.List)und ProcessBuilder#command(String...)schreiben Sie alle vorhandenen Befehle, die über den Konstruktor angegeben wurden (imho, was aus den Dokumenten nicht sehr klar hervorgeht).
Snozzlebert
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"); 
    }
}
Shikha Chauhan
quelle
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();
} 

** **.

user3124811
quelle