21

我必须从我的 Java 程序中打开一个 .exe 文件。所以我首先尝试了以下代码。

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

但我遇到了一些错误。然后我发现必须从 c://program files/test/ 那个位置启动 exe,然后它才会打开而没有错误。所以我决定编写一个 .bat 文件并执行,以便它会 cd 到该位置并执行 .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
4

6 回答 6

26

你不需要控制台。您可以使用工作目录执行进程:

exec(字符串命令,字符串 [] envp,文件目录)

在具有指定环境和工作目录的单独进程中执行指定的字符串命令。

  • 命令是 .exe 的位置
  • envp 可以为空
  • dir,是你的 .exe 的目录

关于您的代码,它应该是...

Runtime.getRuntime().exec("c:\\program files\\test\\test.exe", null, new File("c:\\program files\\test\\"));
于 2012-05-21T13:18:50.190 回答
13

您可以使用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();
于 2012-05-21T13:16:28.630 回答
7

运行文件的另一种方法如下:

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));
}
于 2015-08-25T12:27:19.257 回答
5

使用 java 通过命令行运行 bat 或任何其他的标准代码是:

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

您可以使用 & 分隔符继续多个文件,例如: &&

于 2015-07-30T08:45:11.653 回答
4

这也行。

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

它将在该文件位置启动 .exe。

于 2018-09-29T17:38:24.623 回答
0

运行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");

运行网址:

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

于 2017-05-12T18:11:11.067 回答