Programación Java: llamar a un exe desde Java y pasar parámetros

87

Estoy averiguando un mecanismo para llamar a un ejecutable desde Java y pasar parámetros específicos. ¿Como lo puedo hacer?

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);
}

El código anterior funciona. Pero no puedo pasar parámetros en . MyExe.exe acepta parámetros. Otro problema es cuando PathToExe tiene espacios en blanco. ProcessBuilder parece no funcionar. Por ejemplo:

C:\\User\\My applications\\MyExe.exe

Gracias.

Lorenzo B
fuente
1
new ProcessBuilder ("C: \\ PathToExe \\ MyExe.exe", "param1", "param2"). start ();
Prince John Wesley
1
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();¿Es este fragmento valioso para los argumentos de opciones? Por ejemplo -h que significa ayuda y así sucesivamente ..
Lorenzo B
¿qué pasa con los caminos con espacios en blanco? Gracias de nuevo. ¡¡Muy útil!!
Lorenzo B
3
@Flex: un argumento es un argumento. El significado del argumento depende totalmente del programa que se esté ejecutando. Un programa podría interpretarlo -hcomo una opción, otro podría interpretarlo como un nombre de archivo. ProcessBuilderni sabe ni le importa. Re rutas con espacios: esa es una de las razones por las que los argumentos se dan como cadenas discretas en lugar de (digamos) una lista delimitada por espacios como en la línea de comandos y en algunas API deficientes. Tire espacios allí con abandono, toda la ruta del programa se entregará al sistema operativo para que la trate según corresponda.
TJ Crowder

Respuestas:

119

Pase sus argumentos en el propio constructor.

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
Príncipe Juan Wesley
fuente
¿Qué pasa si el ejecutable está dentro del archivo Jar?
t4d_
@Chicos. por favor ayude a resolver stackoverflow.com/questions/43050217/…
gstackoverflow
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"); 
    }
}
Shikha Chauhan
fuente
1
¿Dónde poner argumentos?
Mert Serimer
1
@Shikha, por favor, responda la pregunta
Anand j. Kadhi
0

A continuación, funciona para mí si su exe depende de algún dll o cierta dependencia, entonces debe establecer la ruta del directorio. Como se menciona a continuación, exePath significa carpeta donde se coloca exe junto con sus archivos de referencia.

Aplicación Exe que crea cualquier archivo temporaray para que se cree en la carpeta mencionada en 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();
} 

**

usuario3124811
fuente