我有一个名为.bat
的{{1}}文件。我在galen.bat
环境变量中包含了此文件的路径。
当我跑步时:
PATH
在galen.bat --version
中,我得到以下输出:
cmd
我有以下Galen Framework
Version: 1.6.3
JavaScript executor: Rhino 1.7 release 5 2015 01 29
代码,我试图通过我的应用程序运行相同的命令 -
java
当我运行时,我收到以下错误 -
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "galen.bat --version");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
请注意,如果我使用
'galen.bat' is not recognized as an internal or external command,
operable program or batch file.
而不是
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "java -version");
然后我在我的eclipse控制台窗口中得到了正确的输出 -
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "galen.bat --version");
为什么java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)
无效?我该如何解决?
谢谢!
答案 0 :(得分:1)
根据the docs:
当Java应用程序使用ProcessBuilder对象创建新进程时,传递给新进程的默认环境变量集与提供给应用程序虚拟机进程的相同集。应用程序可以使用ProcessBuilder.environment更改此集。
因此,您必须在JVM的路径中包含galen.bat
的新路径,或将ProcessBuilder.environment
更改为您的系统PATH
,但according this answer,似乎最后一个选项不是可能的。