2010-04-29 1 views
4

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

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

ответ

2

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

+0

не работает , слэша, где одна из первых вещей, которые я пробовал. – hhhh

7

использовать 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); 
    } 

} 
+0

Ничего из этого не получилось. Я думаю, вы не можете изменять переменные Windows PATH для процесса, вызванного Runtime.exec. – hhhh

+0

работает для меня. если i mkdir foo и положил bar.bat в foo/и заменил exec на «cmd/C start bar.bat», я вижу сообщение от bar.bat с использованием 1.6 на windoze 8.1 –

2

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

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

1

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