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.
java
exe
processbuilder
Lorenzo B
fuente
fuente
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 ..-h
como una opción, otro podría interpretarlo como un nombre de archivo.ProcessBuilder
ni 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.Respuestas:
Pase sus argumentos en el propio constructor.
Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
fuente
Estás en el camino correcto. Los dos constructores aceptan argumentos, o puede especificarlos después de la construcción con
ProcessBuilder#command(java.util.List)
yProcessBuilder#command(String...)
.fuente
ProcessBuilder#command(java.util.List)
yProcessBuilder#command(String...)
owerwrite cualquier comando existente especificado a través del constructor (en mi humilde opinión, eso no está muy claro en los 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"); } }
fuente
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(); }
**
fuente