Я выясняю механизм вызова exe из Java и передачи определенных параметров. Как я могу сделать?
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);
}
Предыдущий код работает. Но я не могу передавать параметры . MyExe.exe принимает параметры. Другая проблема - когда в PathToExe есть пробелы. ProcessBuilder не работает. Например:
C:\\User\\My applications\\MyExe.exe
Спасибо.
java
exe
processbuilder
Лоренцо Б
источник
источник
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
Цен ли этот фрагмент для аргументов опции? Например -h, что означает помощь, и так далее ..-h
ее как параметр, другая - как имя файла.ProcessBuilder
не знает и не заботится. Пути повторения с пробелами: это одна из причин, по которой аргументы задаются как дискретные строки, а не как (скажем) список с разделителями-пробелами, как в командной строке и в некоторых плохих API. Если бросить туда пробелы, весь путь к программе будет отдан ОС для обработки.Ответы:
Передайте свои аргументы в самом конструкторе.
Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
источник
Вы на правильном пути. Эти два Конструкторы принимают аргументы, или вы можете указать их после окончания строительства с
ProcessBuilder#command(java.util.List)
иProcessBuilder#command(String...)
.источник
ProcessBuilder#command(java.util.List)
иProcessBuilder#command(String...)
напишите любые существующие команды, указанные через конструктор (imho, это не очень ясно из документации).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"); } }
источник
Ниже работает для меня, если ваш exe зависит от некоторой dll или определенной зависимости, тогда вам нужно установить путь к каталогу. Как указано ниже, exePath означает папку, в которой размещается exe вместе со ссылками на файлы.
Приложение Exe, создающее любой временный файл, поэтому оно будет создано в папке, упомянутой в 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(); }
**
источник