установить переменную среды Windows PATH во время выполнения в Java - PullRequest
5 голосов
/ 30 апреля 2010

У меня есть Java-программа, которая запускает исполняемый файл с помощью метода Runtime.exec (). Я использую вариант, который принимает набор параметров командной строки в качестве одного аргумента, а некоторые переменные среды в качестве другого аргумента.

Переменная окружения, которую я пытаюсь установить - это путь, поэтому я передаю "PATH = C: \ some \ path" Это не работает. Есть ли какая-то хитрость в этом или каких-либо альтернативах. К сожалению, я застрял на Java 1.4.

Ответы [ 4 ]

7 голосов
/ 30 апреля 2010

используйте http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#getenv%28java.lang.String%29, чтобы получить окружение и исправить его, затем используйте [http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String,%20java.lang.String[],%20java.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);
    }

}
2 голосов
/ 31 августа 2010

Если вы хотите изменить переменную Path в Windows, вам следует взглянуть на JNI_Registry: http://www.trustice.com/java/jnireg/

Это привязка Java к API реестра Windows, которая занимает очень мало места. Я использовал его для моего текущего проекта, и он прекрасно работает.

2 голосов
/ 30 апреля 2010

Если в вашем исходном коде появляется «PATH = C: \ some \ path», это будет неправильно, так как он будет пытаться экранировать 's' и 'p' в этой строке, вы будете использовать "PATH = C: \\ some \\ path "вместо этого (без косых черт). Кроме того, вы не хотите передавать его как строку напрямую, а как массив строк (вероятно, с единственной строкой в ​​нем).

1 голос
/ 17 октября 2011

Одним из решений может быть добавление дополнительной команды к «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);
...