【问题标题】:set windows PATH environment variable at runtime in Java在 Java 运行时设置 windows PATH 环境变量
【发布时间】:2011-02-14 00:46:40
【问题描述】:

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

我尝试设置的环境变量是路径,所以我传入“PATH=C:\some\path”。这不起作用。是否有一些技巧或任何替代方法。不幸的是,我坚持使用 Java 1.4。

【问题讨论】:

    标签: java windows environment-variables runtime.exec


    【解决方案1】:

    使用getenv 获取环境并修复它,然后使用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);
        }
    
    }
    

    【讨论】:

    • 这些都不起作用。我认为您不能更改使用 Runtime.exec 调用的进程的 Windows PATH 变量
    • 为我工作。如果我 mkdir foo 并将 bar.bat 放入 foo/ 并将 exec 更改为“cmd /C start bar.bat”,我会看到来自 bar.bat 的消息,在windoze 8.1 上使用 1.6
    【解决方案2】:

    一种解决方案可能是在设置路径的“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);
    

    【讨论】:

      【解决方案3】:

      如果你想改变windows上的Path变量,你应该看看JNI_Registry:http://www.trustice.com/java/jnireg/

      它是与 Windows Registry API 的 Java 绑定,占用空间非常小。 我已经将它用于我当前的项目并且效果很好。

      【讨论】:

        【解决方案4】:

        如果 "PATH=C:\some\path" 出现在您的源代码中,那将是不正确的,因为它会尝试转义该字符串中的 's' 和 'p',您应该使用 "PATH= C:\\some\\path" 代替(转义斜杠)。此外,您不想直接将其作为字符串传递,而是作为字符串的 array 传递(可能是其中唯一的字符串)。

        【讨论】:

          猜你喜欢
          • 2015-01-15
          • 2017-03-30
          • 2015-01-11
          • 2020-04-06
          • 1970-01-01
          • 2016-11-29
          • 2012-10-01
          • 1970-01-01
          • 2016-07-28
          相关资源
          最近更新 更多