2009-04-20 17 views
5

Wie kann ich eine Umgebungsvariable in WSH JScript-Datei festlegen, die ein anderes Programm aufruft? Hier ist der reduzierte Testfall:Festlegen einer Umgebungsvariablen 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 

Ich erwarte, dass TEST_ ENV _var in der Liste der Variablen, um zu sehen, aber es ist nicht da. Was ist los mit dir?

edit:

Wenn jemand einen funktionierenden Code Probe erzeugen kann, werde ich das als die richtige Antwort markieren. :)

+0

Ich frage mich, ob Sie versuchen, etwas Böswilliges zu tun. –

Antwort

6

Das Problem ist nicht in Ihrem Code, um zu sehen, aber es ist in der Durchführung des Prozesses. Die vollständigen Systemvariablen sind dem ausgeführten Prozess zugeordnet. Also hatte Ihr Kindprozess auch die gleichen Variablen.

Ihr Codebeispiel funktioniert gut. Es fügt die Variable der Systemumgebung hinzu.

Sie müssen also die Variable nicht nur für Ihr System, sondern auch für Ihren Prozess einstellen.

Hier ist der Code.

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

Sobald Sie die Systemvariable erstellt haben.

Es wird die neu erstellte Variable für den aktuellen Prozess zuweisen. Ihr untergeordneter Prozess kann also diese Variable erhalten, während der Befehl "SET" ausgeführt wird.

Sorry für mein schlecht-Englisch.

+0

Danke! –

+0

Ich öffnete [eine andere Frage] (http://stackoverflow.com/questions/4957251/javascript-how-to-retrieve-an-environment-variable), um zu fragen, ob so etwas verwendet werden kann, um den Umgebungsvariablenwert abzurufen, Weißt du etwas? –

0

Sie erhalten die Systemumgebungsvariablen. Ich vermute, Sie haben einfach keine Erlaubnis, sie zu ändern. Sie könnten versuchen, dies zu den Benutzerumgebungsvariablen zu ändern.

Auch ich weiß nicht, ob das Argument Environment() Groß-und Kleinschreibung ist oder nicht. MS-Dokumentation verwendet "System" anstelle von "SYSTEM". Könnte einen Unterschied machen, aber ich weiß es nicht genau.

2

Es gibt 4 „Sammlungen“ (System, Benutzer, Flüchtige und Prozess) Sie wahrscheinlich Prozess wollen, wenn Sie nur einen untergeordneten Prozess müssen die Variable

Verwandte Themen