【发布时间】:2016-08-17 16:53:04
【问题描述】:
我有一个与此处发现的问题相似的问题,但在 Windows 10 上的行为似乎有点不同:Setting the environment for ProcessBuilder
我想在ProcessBuilder 环境中设置Path 环境变量以发送到cmd /C 调用。
考虑:
if(platform.startsWith("Windows"))
{
cmd = "cmd";
command = new String[] {"/C", "prog.exe"};
}
String[] args = new String[]();
args.add(cmd);
args.add(command[0]);
args.add(command[1]);
ProcessBuilder pb = new ProcessBuilder(args);
Map<String, String> env = pb.environment();
// set environmental variables for libraries
if(platform.startsWith("Windows"))
{
env.put("Path", env.get("Path") + ";" + "C:\\test");
}
Process process = pb.start();
使用 Path 是上一篇 SO 帖子中的建议,并且在 Windows 7 上继续工作,但移至 Windows 10,它不再找到 prog.exe。我不明白的是,如果我将env.put("Path"... 更改为env.put("PATH"...,它现在可以正确找到prog.exe。 Windows 10 中的环境变量是否已更改?我还认为 Windows 环境变量不区分大小写,但如果我同时设置 PATH 和 Path,我会在 Windows 7 和 10 的环境中看到每个明确列出的变量。
【问题讨论】:
-
您的意思是
"C:\\test"?"C:\test"其实就是文字C:<tab>est。 -
无法重现。代码更新
Path环境变量在 Windows 7 和 Windows 10 上相同。 -
是的,抱歉,这是一个错字,从原始来源转换为更小的来源。
-
我会过滤环境以替换 PATH 的任何大写形式,而不是放置新的形式。或者至少在添加新路径之前先删除路径和路径。
-
Java 的 SDK 已经做到了这一点。见hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/windows/…
标签: java windows windows-10 processbuilder