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.
java
exe
processbuilder
Lorenzo B.
quelle
quelle
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 ..-h
als Option interpretiert werden, ein anderes als Dateiname.ProcessBuilder
weder 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.Antworten:
Übergeben Sie Ihre Argumente im Konstruktor selbst.
quelle
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 angebenProcessBuilder#command(String...)
.quelle
ProcessBuilder#command(java.util.List)
undProcessBuilder#command(String...)
schreiben Sie alle vorhandenen Befehle, die über den Konstruktor angegeben wurden (imho, was aus den Dokumenten nicht sehr klar hervorgeht).quelle
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 (...)
** **.
** **.
quelle