2009-04-20 5 views
5

Come è possibile impostare una variabile di ambiente nel file jscript WSH che chiama un altro programma? Ecco il caso di prove ridotto:Impostazione di una variabile di ambiente in 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 

mi aspetto di vedere TEST_ ENV _var nella lista di variabili, ma non è lì. Cosa c'è che non va?

edit:

Se qualcuno in grado di produrre un esempio di codice di lavoro, io lo segnaliamo che, come la risposta corretta. :)

+0

Mi chiedo se si sta tentando di fare qualcosa di dannoso. –

risposta

6

Il problema non è nel codice, ma è in esecuzione del processo. Le variabili di sistema complete vengono assegnate al processo che viene eseguito. così, anche il processo figlio aveva lo stesso insieme di variabili.

Il codice di esempio funziona correttamente. Aggiunge la variabile all'ambiente SYSTEM.

Quindi, è necessario impostare la variabile non solo per il sistema ma anche per il processo.

Ecco il codice.

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

Dopo aver creato la variabile di sistema.

Assegna la variabile appena creata per il processo corrente. Quindi, il processo figlio può ottenere quella variabile mentre viene eseguito il comando "SET".

Ci scusiamo per il mio cattivo inglese.

+0

Grazie! –

+0

Ho aperto [un'altra domanda] (http://stackoverflow.com/questions/4957251/javascript-how-to-retrieve-an-environment-variable) per chiedere se qualcosa del genere può essere utilizzato per recuperare il valore della variabile di ambiente, sai qualcosa? –

0

Si stanno ottenendo le variabili di ambiente del sistema. Sospetto che tu non abbia il permesso di modificarli; si potrebbe provare a cambiare questo alle variabili di ambiente dell'utente.

Inoltre, non so se l'argomento su Environment() fa distinzione tra maiuscole e minuscole. La documentazione di MS utilizza "System" anziché "SYSTEM". Potrebbe fare la differenza ma non lo so per certo.

2

Ci sono 4 "collezioni" (Sistema, User, Volatile e Process) probabilmente si desidera processo se avete solo bisogno di un processo figlio per vedere la variabile