Установка переменной окружения в JavaScript - PullRequest
5 голосов
/ 20 апреля 2009

Как я могу установить переменную окружения в файле WSH jscript, который вызывает другую программу? Вот сокращенный контрольный пример:

envtest.js
----------
var oShell = WScript.CreateObject("WScript.Shell");
var oSysEnv = oShell.Environment("SYSTEM");
oSysEnv("TEST_ENV_VAR") = "TEST_VALUE";
oExec = oShell.Run("envtest.bat", 1, true);    

envtest.bat
-----------
set
pause

Я ожидаю увидеть TEST_ ENV _VAR в списке переменных, но его там нет. Что не так?

редактирование:

Если кто-то может создать пример рабочего кода, я отмечу это как правильный ответ. :)

Ответы [ 3 ]

6 голосов
/ 02 июня 2009

Проблема не в вашем коде, а в выполнении процесса. Полные системные переменные присваиваются процессу, который выполняется. Итак, ваш дочерний процесс также имел такой же набор переменных.

Ваш пример кода работает хорошо. Добавляет переменную в среду SYSTEM.

Итак, вам нужно установить переменную не только для вашей системы, но и для вашего процесса.

Вот код.

var oShell = WScript.CreateObject("WScript.Shell");
var oSysEnv = oShell.Environment("SYSTEM");
oSysEnv("TEST1") = "TEST_VALUE";
var oSysEnv = oShell.Environment("PROCESS");
oSysEnv("TEST1") = "TEST_VALUE";
oExec = oShell.Run("envtest.bat", 1, true);  

Как только вы создали системную переменную.

Он назначит вновь созданную переменную для текущего процесса. Таким образом, ваш дочерний процесс может получить эту переменную во время выполнения команды «SET».

Извините за мой плохой английский.

2 голосов
/ 12 мая 2009

Существует 4 "коллекции" (System, User, Volatile и Process), которые вы, вероятно, хотите использовать Process, если вам просто нужен дочерний процесс для просмотра переменной

0 голосов
/ 21 апреля 2009

Вы получаете системные переменные окружения. Я подозреваю, что у вас просто нет разрешения изменять их; Вы можете попробовать изменить это на переменные среды пользователя.

Также я не знаю, является ли аргумент Environment() чувствительным к регистру или нет. Документация MS использует "System" вместо "SYSTEM". Может иметь значение, но я точно не знаю.

...