Frage

Wie kann ich eine Umgebungsvariable in WSH JScript -Datei festlegen, die ein anderes Programm aufruft? Hier ist der reduzierte Testfall:

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 gehe davon aus, dass Test_ env _var in der Liste der Variablen sehen wird, aber es ist nicht da. Was ist los?

bearbeiten:

Wenn jemand ein Arbeitscode -Beispiel produzieren kann, werde ich dies als die richtige Antwort markieren. :)

War es hilfreich?

Lösung

Das Problem liegt nicht in Ihrem Code, sondern in der Ausführung des Prozesses. Die vollständigen Systemvariablen werden dem ausgeführten Prozess zugeordnet. Ihr Kinderprozess hatte also auch die gleichen Variablen.

Ihre Code-Stichprobe funktioniert gut. Es fügt die Variable zur Systemumgebung hinzu.

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

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. Daher kann Ihr untergeordneter Prozess diese Variable erhalten, während der Befehl "festgelegt" ausgeführt wird.

Entschuldigung für mein schlechtes Englisch.

Andere Tipps

Es gibt 4 "Sammlungen" (System, Benutzer, volatile und Prozess). Sie möchten wahrscheinlich einen Prozess, wenn Sie nur einen untergeordneten Prozess benötigen, um die Variable zu sehen

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

Ich weiß auch nicht, ob das Argument zu Environment() ist Fallempfindlichkeit oder nicht. Die Dokumentation von MS verwendet verwendet "System" Anstatt von "SYSTEM". Könnte einen Unterschied machen, aber ich weiß es nicht genau.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top