Estou descobrindo um mecanismo para chamar um exe de Java e passar parâmetros específicos. Como eu posso fazer?
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);
}
O código anterior funciona. Mas não consigo passar parâmetros . MyExe.exe aceita parâmetros. Um outro problema é quando PathToExe tem espaços em branco. O ProcessBuilder parece não funcionar. Por exemplo:
C:\\User\\My applications\\MyExe.exe
Obrigado.
java
exe
processbuilder
Lorenzo B
fonte
fonte
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
Este snippet é valioso para argumentos de opção? Por exemplo -h que significa ajuda e assim por diante ..-h
como uma opção, outro pode interpretar como um nome de arquivo.ProcessBuilder
nem sabe nem se importa. Re caminhos com espaços: esse é um dos motivos pelos quais os argumentos são fornecidos como strings discretas em vez de (digamos) uma lista delimitada por espaço como na linha de comando e em algumas APIs deficientes. Jogue espaços lá com abandono, todo o caminho do programa será fornecido ao sistema operacional para tratar conforme apropriado.Respostas:
Passe seus argumentos no próprio construtor.
Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
fonte
Você está no caminho certo. Os dois construtores aceitam argumentos, ou você pode especificá-los após a construção com
ProcessBuilder#command(java.util.List)
eProcessBuilder#command(String...)
.fonte
ProcessBuilder#command(java.util.List)
eProcessBuilder#command(String...)
owerwrite quaisquer comandos existentes especificados por meio do construtor (mas isso não está muito claro nos documentos).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"); } }
fonte
Abaixo funciona para mim se seu exe depende de alguma dll ou certa dependência, então você precisa definir o caminho do diretório. Como mencionado abaixo, exePath significa pasta onde exe é colocado junto com seus arquivos de referência.
Aplicação Exe criando qualquer arquivo temporaray para que crie na pasta menção em 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(); }
**
fonte