在Java中运行时设置windows PATH环境variables

我有一个Java程序,使用Runtime.exec()方法触发可执行文件。 我使用的变体,将一组命令行参数作为一个参数,一些环境variables作为另一个参数。

我试图设置的环境variables是path,所以我传递“path= C:\某些\path”。 这不起作用。 有这个或任何其他的一些伎俩。 我不幸被卡住了Java 1.4。

使用http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#getenv%28java.lang.String%29来获取环境并修复它,然后使用一个风味%5B http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String,%20java.lang.String%5B%5D,%20java%5D。 io.File%29] [1]来做exec。

这与在其中具有路径的批处理文件一起工作。

package p; import java.util.*; public class Run { static String[] mapToStringArray(Map<String, String> map) { final String[] strings = new String[map.size()]; int i = 0; for (Map.Entry<String, String> e : map.entrySet()) { strings[i] = e.getKey() + '=' + e.getValue(); i++; } return strings; } public static void main(String[] arguments) throws Exception { final Map<String, String> env = new HashMap<String, String>(System.getenv()); env.put("Path", env.get("Path") + ";foo"); final String[] strings=mapToStringArray(env); Runtime.getRuntime().exec("cmd /C start foo.bat",strings); } } 

如果在你的源代码中出现“PATH = C:\ some \ path”,这将是不正确的,因为它将试图在该字符串中跳过“s”和“p”,你会使用“PATH = C:\ \一些\ \路径“而不是(斜杠)。 另外,你不想直接把它作为一个字符串传递,而是作为一个字符串数组 (可能是作为唯一的字符串)。

如果你想改变窗口上的路径变量,你应该看看JNI_Registry: http : //www.trustice.com/java/jnireg/

这是一个Java绑定到Windows注册表API,并有一个非常小的脚印。 我用它来当前的项目,它工作得很好。

一种解决方案可能是在设置路径的地方添加一个额外的命令“exec”,如下例所示: http : //www.neowin.net/forum/topic/620450-java-runtimegetruntimeexec-help/

摘抄:

  cmd = new String[7]; cmd[0] = "cmd"; cmd[1] = "/C"; cmd[2] = "set PATH=C:\\Program Files\\Java\\jdk1.6.0_04\bin"; cmd[3] = "copy " + "\"" +path + "\\" +name+ "\"" + " C:\\java"; cmd[4] = "chdir C:\\java"; cmd[5] = "javac *.java"; cmd[6] = "jar cmf mainClass.txt"+" name"+".jar *.class"; try{ Runtime.getRuntime().exec(cmd);