2009-04-20 27 views
5

¿Cómo puedo establecer una variable de entorno en el archivo WSH jscript que llama a otro programa? Aquí está el caso de ensayos simplificado:Establecer una variable de entorno en 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 

espero ver test_ ENV _var en la lista de variables, pero no está allí. ¿Qué pasa?

edición:

Si alguien puede producir una muestra de código de trabajo, voy marca que como la respuesta correcta. :)

+0

Me pregunto si estás tratando de hacer algo malicioso. –

Respuesta

6

El problema no está en su código, pero es en la ejecución del proceso. Las variables completas del sistema se asignan al proceso que se ejecuta. entonces, el proceso de su hijo también tenía el mismo conjunto de variables.

Su muestra de código funciona bien. Agrega la variable al entorno del SISTEMA.

Por lo tanto, debe establecer la variable no solo para su sistema sino también para su proceso.

Aquí está el código.

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

Una vez que haya creado la variable del sistema.

Asignará la nueva variable creada para el proceso actual. Entonces, su proceso hijo puede obtener esa variable mientras se ejecuta el comando "SET".

Lo siento por mi mal inglés.

+0

Gracias! –

+0

Abrí [otra pregunta] (http://stackoverflow.com/questions/4957251/javascript-how-to-retrieve-an-environment-variable) para preguntar si algo así se puede usar para recuperar el valor de la variable de entorno, ¿sabes algo? –

0

Obtiene las variables de entorno del sistema. Sospecho que simplemente no tienes permiso para modificarlos; podrías intentar cambiar esto a las variables de entorno del usuario.

Tampoco sé si el argumento Environment() distingue entre mayúsculas y minúsculas o no. La documentación de MS usa "System" en lugar de "SYSTEM". Podría hacer una diferencia, pero no estoy seguro.

2

Hay 4 "colecciones" (Sistema, Usuario, volátil, y el proceso) es probable que desee proceso si sólo se necesita un proceso hijo para ver la variable

Cuestiones relacionadas