Причина, по которой это не работает, состоит в том, что два вызова exec()
запускают две разные оболочки; тот, в котором вы указали путь, не тот, в котором вы его отметили.
Трудно изменить постоянную общесистемную настройку пути. Но вы можете изменить путь на время вызова одной или нескольких программ, для которых он вам нужен.
В частности, вам нужно написать себе пакетный файл (.CMD
или .BAT
, как вам угодно), установить PATH
в начале, следуйте этому с любыми командами DOS / Windows, которые вы захотите. как выполняется с этим путем, а затем exec()
этот файл сценария.
Обновление PATH для текущего Java процесса кажется довольно бессмысленным. Java, однажды запущенная, не заботится о пути. Или вы используете какой-нибудь библиотечный код?
Если вы выполняете команды DOS / Windows из Java с использованием exec()
, вышеописанный прием будет работать.
Обновление: Хорошо, у вас есть библиотечный код, который по своим собственным причинам хочет, чтобы PATH был установлен именно так, и вы хотите дать ему то, что он хочет.
Что я хотел бы рассмотреть, так это запустить новую JVM. Вы можете использовать exec(cmd, envp)
для запуска нового Java-приложения («вы сами» в крайнем случае) с пользовательским набором переменных среды в envp
. Просто скопируйте те, которые уже есть, и манипулируйте содержимым PATH
, если есть.
Стандартный способ запуска нового Java-приложения - это создание нового ClassLoader
, и есть различные описания того, как этого добиться. Но я не уверен, что вы можете использовать эту процедуру для создания новой среды, так что exec
- JVM может быть не только проще, но, возможно, и единственным способом.