2009-04-20 19 views
5

Jak ustawić zmienną środowiskową w pliku WSS jscript, który wywołuje inny program? Oto zmniejszony przypadek testowy:Ustawianie zmiennej środowiskowej w javascript

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 

Spodziewam się zobaczyć TEST_ ENV _VAR na liście zmiennych, ale go nie ma. Co jest nie tak?

edit:

Jeśli ktoś może produkować próbki kodu pracę, będę zaznaczyć, że jako poprawną odpowiedź. :)

+0

Zastanawiam się, czy próbujesz zrobić coś złośliwego. –

Odpowiedz

6

problem nie jest w kodzie, ale jest w wykonaniu procesu. Pełne zmienne systemowe są przypisywane do realizowanego procesu. więc proces potomny miał również ten sam zestaw zmiennych.

Twój przykładowy kod działa dobrze. Dodaje zmienną do środowiska SYSTEM.

Należy zatem ustawić zmienną nie tylko dla systemu, ale także dla procesu.

Oto kod.

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); 

Po utworzeniu zmiennej systemowej.

Przypisuje nowo utworzoną zmienną do bieżącego procesu. Tak więc proces potomny może pobrać tę zmienną podczas wykonywania polecenia "SET".

Przepraszamy za mój zły angielski.

+0

Dzięki! –

+0

Otworzyłem [kolejne pytanie] (http://stackoverflow.com/questions/4957251/javascript-how-to-retrieve-an-environment-variable), aby zapytać, czy coś takiego może być użyte do pobrania wartości zmiennej środowiskowej, wiesz coś o? –

0

Otrzymujesz systemowe zmienne środowiskowe. Podejrzewam, że po prostu nie masz uprawnień do ich modyfikowania; możesz spróbować zmienić to na zmienne środowiskowe użytkownika.

Również nie wiem, czy w rozmowie z Environment() rozróżniana jest wielkość liter. Dokumentacja MS używa "System" zamiast "SYSTEM". Może coś zmienić, ale nie wiem na pewno.

2

Istnieją 4 „kolekcje” (System, Użytkownik, lotny i procesowe) prawdopodobnie zechcesz proces, jeśli wystarczy proces potomny, aby zobaczyć zmienną

Powiązane problemy