Проблема переменной среды с использованием Java - PullRequest
0 голосов
/ 21 октября 2010

Шаги, использующие API времени выполнения

  1. echo %PATH% (вывод будет выглядеть примерно как "c:\windows\system32;d:\test")
  2. execute ping или любая системная команда, вывод будет успешным
  3. удалить одно значение для пути, например d:\test
  4. echo %PATH% (вывод будет "%system32%\system32;")
  5. Теперь, если я выполню ту же команду, выполненную на шаге 2, какping, тогда я получаю «команда не найдена».

Примечание Plesae: - все шаги, выполняемые в одном и том же Java-процессе

Кто-нибудь подскажет, что не так в этом процессе

Ответы [ 3 ]

1 голос
/ 21 октября 2010

Используете ли вы ProcessBuilder для этого? Это обеспечивает простой доступ к переменным среды, передаваемым подпроцессам. Похоже, вы пытаетесь изменить глобальную среду, что, вероятно, не то, что вы хотите сделать.

Вот пример:

ProcessBuilder pb = new ProcessBuilder();
Map<String, String> env = pb.environment();
System.out.println("Current environment: " + env.toString());
String path = env.get("PATH");
path = path.substring(0, path.indexOf("d:\\test")) + path.substring(path.indexOf("d:\\test") + "d:\\test".length());
env.put("PATH", path);
pb.command("ping");
Process p = pb.start();
// ...

Поскольку это звучит так, как будто вы работаете в Windows, вам нужно быть более осторожным при поиске переменной пути в среде, поскольку в среде Windows регистр не учитывается, но Map.get() чувствителен к регистру. Вероятно, лучше всего пройтись по клавишам в поисках equalsIgnoreCase("PATH").

Кроме того, вы можете очистить путь, прежде чем возвращать его на карту (убедитесь, что он не содержит лишних System.getProperty("path.separator") с.

1 голос
/ 24 октября 2010

Ваш вопрос мне не понятен, но я вижу некоторую проблему:

% System32% обычно это c: \ windows \ system32.

В вашем примере, если для среды правильно задано% system32%, шаг (4) "% system32% \ system32;" будет разрешено в c: \ windows \ system32 \ system32

Что может не то, что вы хотите.

1 голос
/ 21 октября 2010

Похоже, что переменные не раскрываются во второй раз, когда вы показываете PATH (шаг 4). Возможно, вы повреждаете путь, когда удаляете одно значение на шаге 3.

Покажите нам фрагмент кода, демонстрирующий проблему.

...