Запустите файл.exe в Java из расположения файла

Я должен открыть файл.exe из моей программы Java. Сначала я попробовал следующий код.

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

Но я получил какую-то ошибку. Затем я узнал, что exe-файл должен быть запущен из того места, где находится c://program files/test/, только тогда он откроется без ошибок. Поэтому я решил написать файл.bat и выполнить его так, чтобы он попал в это место и выполнил файл.exe.

Ниже приведен мой код:

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

Приведенный выше код работает отлично. Тем не менее, командная строка также открывается в конце моего.exe (приложения). Он закрывается только после выхода из файла.exe

Мне нужно пересмотреть командную строку, когда статистика моего приложения.

Мой файл.bat будет похож на следующий после того, как он будет записан программой.

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

6 ответов

Решение

Вам не нужна консоль. Вы можете выполнить процесс, используя рабочий каталог:

exec (Строковая команда, String[] envp, File dir)

Выполняет указанную строковую команду в отдельном процессе с указанной средой и рабочим каталогом.

  • команда - это расположение.exe
  • envp может быть нулевым
  • dir, это каталог вашего.exe

Что касается вашего кода, это должно быть...

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

Вы можете использовать Runtime.exec(java.lang.String, java.lang.String[], java.io.File), где вы можете установить рабочий каталог.

Или вы можете использовать ProcessBuilder следующим образом:

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

Другой способ запуска файла заключается в следующем:

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

Стандартный код для запуска bat или любой другой командной строки с использованием Java:

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

и вы можете продолжить для нескольких файлов, используя & supperator, например: &&

Это также будет работать.

 Process process = new ProcessBuilder("C:\\Users\\test\\Downloads\\Termius.exe").start();

Это запустит.exe в этом месте файла.

Лучший способ запустить EXE-файл

сделать объект java.awt.Desktop и равным Desktop.getDesktop();

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

запустить exe-файл:

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

или же

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

запустить URL:

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

Другие вопросы по тегам