Java - 执行外部 Windows 应用程序?
Java - Execute External Windows Applications?
我不确定如何通过 启动外部应用程序(特别是在 Windows 上Java 代码。我不打算将此 Java 代码用于 Mac/Linux,所以让我们关注 Windows代码.
我做了什么
这两天我一直在研究这个问题,但我仍然没有找到答案。我很容易找到 Runtime.getRuntime().exec()
方法,但问题是我无法在 IntelliJ Idea 中找到有关从本地工作区启动批处理 (.bat) 文件的信息 .
我在问什么
我只想知道如何在我的工作区中执行本地批处理文件(在像 com.example.batch
这样的文件夹中)and/or如何执行带有直接文件地址的 (.exe) 或 (.bat)。 (例如 碎片整理和优化驱动器 (.exe) for Windows: C:\WINDOWS\system32\dfrgui.exe
)
提前感谢大家,我一直渴望得到这个答案。
首先,您应该使用 ProcessBuilder
来执行外部程序,以获得比 Runtime.getRuntime().exec()
更易于使用的界面。
其次,要执行.bat
文件,您所要做的就是执行cmd.exe
并在/C
选项中传递批处理文件名。请注意,当您 运行 批处理文件时,您正在启动 DOS cmd 处理器并告诉它 运行 批处理文件而不是从终端读取。因此,批处理文件必须位于 cmd.exe
可访问的位置。因此它不能在包含您的 Java 程序的 jar 文件中。如果有必要将它分发到 jar 中,您必须将它复制到某个文件系统中。
你读过基本内容了吗Runtime.exec() article?
本文第 2 页列出了一个常见的陷阱:Runtime.exec() 不是命令行。
.bat 文件不是可执行文件。它们是指令的集合。就像 Linux 中的 shell 脚本一样,您需要一些东西来实际执行这些指令。
在这种情况下,您的可执行文件是 cmd.exe
,它将以 /C
和 com.example.batch
作为参数:
Runtime.getRuntime().exec(new String[] { "cmd.exe", "/C", "com.example.batch"});
作为旁注,请查看 ProcessBuilder
class。它比 Runtime
好得多。是的,Runtime
文章中的所有规则都适用于 ProcessBuilder
。
我不确定如何通过 启动外部应用程序(特别是在 Windows 上Java 代码。我不打算将此 Java 代码用于 Mac/Linux,所以让我们关注 Windows代码.
我做了什么
这两天我一直在研究这个问题,但我仍然没有找到答案。我很容易找到 Runtime.getRuntime().exec()
方法,但问题是我无法在 IntelliJ Idea 中找到有关从本地工作区启动批处理 (.bat) 文件的信息 .
我在问什么
我只想知道如何在我的工作区中执行本地批处理文件(在像 com.example.batch
这样的文件夹中)and/or如何执行带有直接文件地址的 (.exe) 或 (.bat)。 (例如 碎片整理和优化驱动器 (.exe) for Windows: C:\WINDOWS\system32\dfrgui.exe
)
提前感谢大家,我一直渴望得到这个答案。
首先,您应该使用 ProcessBuilder
来执行外部程序,以获得比 Runtime.getRuntime().exec()
更易于使用的界面。
其次,要执行.bat
文件,您所要做的就是执行cmd.exe
并在/C
选项中传递批处理文件名。请注意,当您 运行 批处理文件时,您正在启动 DOS cmd 处理器并告诉它 运行 批处理文件而不是从终端读取。因此,批处理文件必须位于 cmd.exe
可访问的位置。因此它不能在包含您的 Java 程序的 jar 文件中。如果有必要将它分发到 jar 中,您必须将它复制到某个文件系统中。
你读过基本内容了吗Runtime.exec() article?
本文第 2 页列出了一个常见的陷阱:Runtime.exec() 不是命令行。
.bat 文件不是可执行文件。它们是指令的集合。就像 Linux 中的 shell 脚本一样,您需要一些东西来实际执行这些指令。
在这种情况下,您的可执行文件是 cmd.exe
,它将以 /C
和 com.example.batch
作为参数:
Runtime.getRuntime().exec(new String[] { "cmd.exe", "/C", "com.example.batch"});
作为旁注,请查看 ProcessBuilder
class。它比 Runtime
好得多。是的,Runtime
文章中的所有规则都适用于 ProcessBuilder
。