Програмування на Java: виклик exe з Java та передавання параметрів


87

Я з'ясовую механізм виклику 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

Дякую.


1
новий ProcessBuilder ("C: \\ PathToExe \\ MyExe.exe", "param1", "param2"). start ();
Принц Джон Веслі


1
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();Чи цінний цей фрагмент для аргументів опцій? Наприклад -h, що означає допомогу тощо ...
Lorenzo B

а як щодо шляхів із порожніми пробілами? Ще раз дякую вам. Дуже корисний!!
Lorenzo B,

3
@Flex: Аргумент - це аргумент. Значення аргументу повністю залежить від виконуваної програми. Одна програма може інтерпретувати -hяк варіант, інша - як ім'я файлу. ProcessBuilderні знає, ні дбає. Повторні шляхи з пробілами: Це одна з причин того, що аргументи подаються як дискретні рядки, а не як (скажімо) список, розділений пробілами, як у командному рядку та в деяких неякісних API. Кидаючи туди пробіли з відмовою, весь шлях програми буде переданий ОС для обробки як слід.
TJ Crowder,

Відповіді:



8

Ви на правильному шляху. Ці два Конструктори приймають аргументи, або ви можете вказати їх після закінчення будівництва з ProcessBuilder#command(java.util.List)і ProcessBuilder#command(String...).


Для роз'яснення: ProcessBuilder#command(java.util.List)і ProcessBuilder#command(String...)напишіть будь-які існуючі команди, вказані через конструктор (це не дуже зрозуміло з документів).
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"); 
    }
}

1
Куди покласти аргументи?
Mert Serimer

1
@Shikha, будь ласка, пройди через питання
Anand j. Кадхі

0

Нижче працює для мене, якщо ваш exe залежить від якоїсь DLL або певної залежності, тоді вам потрібно встановити шлях до каталогу. Як згадується нижче, exePath означає папку, де exe розміщується разом із файлами посилань.

Додаток Exe, який створює будь-який файл temporaray, щоб створити його у згадці папки в 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();
} 

**

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.