【问题标题】:Setting an environment variable in javascript在javascript中设置环境变量
【发布时间】:2009-04-20 14:21:03
【问题描述】:

如何在调用另一个程序的 WSH jscript 文件中设置环境变量?这是简化的测试用例:

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

我希望在变量列表中看到 TEST_ ENV _VAR,但它不存在。怎么了?

编辑:

如果有人可以生成一个有效的代码示例,我会将其标记为正确答案。 :)

【问题讨论】:

  • 我想知道你是否在尝试做一些恶意的事情。

标签: javascript environment batch-file wsh


【解决方案1】:

问题不在于您的代码,而在于流程的执行。完整的系统变量被分配给正在执行的进程。因此,您的子进程也具有相同的变量集。

您的代码示例运行良好。它将变量添加到 SYSTEM 环境中。

因此,您不仅需要为系统设置变量,还需要为进程设置变量。

这是代码。

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

一旦你创建了系统变量。

它将为当前进程分配新创建的变量。因此,您的子进程可以在执行“SET”命令时获取该变量。

对不起,我的英语不好。

【讨论】:

  • 谢谢!
  • 我打开another question问是否可以使用类似的东西来检索环境变量值,你知道吗?
【解决方案2】:

如果您只需要一个子进程来查看变量,您可能需要 Process 有 4 个“集合”(系统、用户、易失性和进程)

【讨论】:

    【解决方案3】:

    您正在获取系统环境变量。我怀疑您根本没有修改它们的权限;您可以尝试将其更改为用户环境变量。

    我也不知道Environment() 的参数是否区分大小写。 MS 的文档使用"System" 而不是"SYSTEM"。可能会有所不同,但我不确定。

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 2018-07-13
      • 2011-03-25
      • 2015-02-01
      • 2017-01-01
      • 2017-10-30
      • 2012-03-22
      • 2012-06-30
      • 2015-04-06
      相关资源
      最近更新 更多