2013-04-11 3 views
0

Я хочу установить переменные среды для SubProcess, созданные через ProcessBuilder, после его запуска. Следующий код не работает:Изменение переменных окружения ProcessBuilder после запуска процесса

ProcessBuilder pb = new ProcessBuilder("cscript.exe", "test.vbs"); 
Process p = pb.start(); 
pb.environment().put("test", "1"); 

Есть ли способ сделать это?

ответ

3

Нет, вы не можете этого сделать. Среда разработки процессов изолирована и не изменена после их запуска.

Два экземпляр ProcessBuilder всегда содержит независимых сред процесса, поэтому изменения в возвращаемой карту никогда не будут отражены в любом другом случае ProcessBuilder или значения, возвращаемые System.getenv.

Последующие изменения этого конструктора процессов не повлияют на возвращенный процесс.

Если вы заинтересованы в передаче информации в процессе после его запуска, используйте OutputStream для процесса и писать в него. Процесс должен считывать из потока ввода и обрабатывать сообщение от вызывающего. More help.

OutputStream os = process.getOutputStream(); 
// write data to this stream and read it on the other end. 
+0

Может быть, стоит отметить, что это не является ограничением 'ProcessBuilder' или Java, но это связано с природой, как операционные системы работают в целом - и что это не может быть иначе. –

2

Это невозможно, см. ProcessBuilder.start API: ... Последующие изменения этого конструктора процессов не повлияют на возвращенный процесс.

Смежные вопросы