Saya sedang mencari tahu mekanisme untuk memanggil exe dari Java dan meneruskan parameter tertentu. Bagaimana saya bisa melakukannya?
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);
}
Kode sebelumnya berfungsi. Tapi saya tidak bisa memasukkan parameter . MyExe.exe menerima parameter. Masalah lainnya adalah ketika PathToExe memiliki spasi kosong. ProcessBuilder sepertinya tidak berfungsi. Sebagai contoh:
C:\\User\\My applications\\MyExe.exe
Terima kasih.
java
exe
processbuilder
Lorenzo B
sumber
sumber
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
Apakah cuplikan ini berharga untuk argumen opsi? Misalnya -h yang berarti bantuan dan sebagainya ..-h
sebagai opsi, program lain dapat menafsirkannya sebagai nama file.ProcessBuilder
tidak tahu atau peduli. Re path dengan spasi: Itulah salah satu alasan mengapa argumen diberikan sebagai string terpisah daripada sebagai (katakanlah) daftar yang dipisahkan spasi seperti pada baris perintah dan di beberapa API yang buruk. Lempar spasi di sana dengan mengabaikan, seluruh jalur program akan diberikan ke OS untuk diperlakukan sebagaimana mestinya.Jawaban:
Teruskan argumen Anda dalam konstruktor itu sendiri.
Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
sumber
Anda berada di jalur yang benar. The dua konstruktor menerima argumen, atau Anda dapat menentukan mereka pasca konstruksi dengan
ProcessBuilder#command(java.util.List)
danProcessBuilder#command(String...)
.sumber
ProcessBuilder#command(java.util.List)
danProcessBuilder#command(String...)
owerwrite setiap perintah yang ada yang ditentukan melalui konstruktor (imho itu tidak terlalu jelas dari dokumen).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"); } }
sumber
Di bawah ini berfungsi untuk saya jika exe Anda bergantung pada beberapa dll atau ketergantungan tertentu maka Anda perlu mengatur jalur direktori. Seperti disebutkan di bawah exePath berarti folder tempat exe ditempatkan bersama dengan file referensinya.
Aplikasi exe membuat file temporaray apa pun sehingga akan dibuat di folder yang disebutkan di 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(); }
**
sumber