2012-05-21 47 views
13

Tengo que abrir un archivo .exe de mi programa Java. Así que intenté seguir el código Primero.Ejecutar archivo .exe en Java desde la ubicación del archivo

Process process = runtime.exec("c:\\program files\\test\\test.exe"); 

Pero me estaba dando un error. Luego descubrí que el exe debe iniciarse desde esa ubicación que es c: // archivos de programa/prueba/solo entonces se abrirá sin errores. Así que decidí escribir un archivo .bat y ejecutarlo para que se copie a esa ubicación y ejecute el archivo .exe.

que sigue es mi código:

BufferedWriter fileOut; 

String itsFileLocation = "c:\\program files\\test\\" 
   System.out.println(itsFileLocation); 
   try { 
    fileOut = new BufferedWriter(new FileWriter("C:\\test.bat")); 
    fileOut.write("cd\\"+"\n"); 
    fileOut.write("cd "+ itsFileLocation +"\n"); 
    fileOut.write("test.exe"+"\n"); 
    fileOut.write("exit"+"\n"); 
    
    fileOut.close(); // Close the output stream after all output is done. 
   } catch (IOException e1) { 
    e1.printStackTrace(); 
   } // Create the Buffered Writer object to write to a file called filename.txt 
   Runtime runtime = Runtime.getRuntime(); 
   try { 
    Process process =runtime.exec("cmd /c start C:\\test.bat"); 
   } catch (IOException e) { 
    e.printStackTrace(); 
   } 

El código anterior funciona perfectamente. Sin embargo, el símbolo del sistema también se abre en la parte posterior de mi .exe (Aplicación). Se cierra solo después de que el archivo .exe sale ...

Necesito clicar el símbolo del sistema cuando las estadísticas de mi aplicación.

Mi archivo .bat será como seguir después de haber sido escrito por el programa.

cd\ 
cd C:\Program Files\test\ 
test.exe 
exit 

Respuesta

15

Usted no necesita una consola. Puede ejecutar un proceso que utiliza un directorio de trabajo:

exec (comando String, String [] envp, dir File)

ejecuta el comando cadena especificada en un proceso separado con el medio ambiente y el directorio de trabajo.

  • comando es la ubicación del archivo .exe
  • envp puede ser nulo
  • dir, es el directorio de su .exe

Con respecto a su código debe ser ...

Runtime.getRuntime().exec("c:\\program files\\test\\test.exe", null, new File("c:\\program files\\test\\")); 
+0

Java interpretará correctamente '/' como un archivo separador en windows - al menos en Windows 7. – Dunes

+0

Hay Gracias voy a intentar y le dejo saber en pocos minutos ... –

+0

Hay gracias funcionó .. –

9

Puede utilizar Runtime.exec(java.lang.String, java.lang.String[], java.io.File) donde se puede establecer el directorio de trabajo.

o bien puede utilizar ProcessBuilder de la siguiente manera:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); 
pb.directory(new File("myDir")); 
Process p = pb.start(); 
+0

Gracias Kuldeep Ya lo he intentado ... no funciona, estoy recibiendo el mismo error. Se espera que esté en el mismo directorio del archivo .exe cuando ejecuto el archivo .exe –

+0

Si es posible, puede dar el ejemplo de Runtime.exe .. con respecto a mi código ... gracias de antemano. –

+0

Gracias Kuldeep, También probé ProcessBuilder. Estoy obteniendo el mismo problema. –

1

el Código Estándar para ejecutar murciélago o cualquier otra a través de la línea de comandos usando java es:

runtimeProcess = Runtime.getRuntime().exec("cmd /c start cmd.exe /C\""+backup_path+"\""); 
int processComplete = runtimeProcess.waitFor(); 

y se puede ir en continuar durante varios archivos usando & supperator como: & &

4

Otra forma de ejecutar un archivo es el siguiente:

import java.awt.Desktop; 
import java.io.File; 

public static void open(String targetFilePath) throws IOException 
{ 
    Desktop desktop = Desktop.getDesktop(); 

    desktop.open(new File(targetFilePath)); 
} 
0

mejor manera de ejecutar el archivo exe

make java.awt.Desktop object e igual Desktop.getDesktop();

Desktop desktop = Desktop.getDesktop(); desktop.open("file path");

archivo de ejecución exe:

desktop.open("C:\\Windows\\System32\\cmd.exe");

o

desktop.open("C:/Windows/System32/cmd.exe");

plazo url:

desktop.browse(new URI("http://www.google.com"));

Cuestiones relacionadas