没有看到PowerShell环境变量?

时间:2014-06-13 09:58:01

标签: windows powershell environment-variables

由另一个程序(以用户身份启动)设置我自己的环境变量使用(kernel32.dll:

 SetEnvironmentVariableW("ToTestVar_001", "ToTestVar.001 11:11:54" )

因此,设置环境变量ToTestVar_001的程序可以读取它但我在PowerShell中启动(以同一用户身份启动)

 Get-ChildItem Env:

未列出ToTestVar_001如何创建可由我的程序和PowerShell读取和编写的环境变量?

我的下一个尝试是创建一个环境。无功。 by PowerShell:“TestVariable”=“test Value”但我的程序无法使用kernel32.dll找到它:

string rdBuff = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx":
GetEnvironmentVariableW("TestVariable", rdBuff, StringLen(rdBuff));

我在哪里可以找到,读取和设置Win 7 64位中的Kernel32.dll-Env.Variables - 这是问题吗?

提前致谢, Gooly

1 个答案:

答案 0 :(得分:2)

这不是那么简单。

在您编写代码的方式Get-ChildItem Env:中,只有当您的进程(EXE文件)启动PowerShell.exe(允许他的孩子访问)时,才会使用SetEnvironmentVariableW("ToTestVar_001", "ToTestVar.001 11:11:54" )查看由EXE文件定位的环境var在定位环境变量之后继承他的环境变量。在这种情况下,PowerShell将继承环境变量并将看到它。

它存在另一个设置环境变量的地方,注册表中的那个我指的是使用高级系统属性可以看到的那个:

enter image description here

所有用户的环境变量都存储在:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment

特定用户的环境变量全部存储在:

HKEY_CURRENT_USER\Environment

但是再一次不是那么简单,如果你改变注册表并启动一个进程就可以了,你可以在进程中看到你在注册表中设置的var。但是如果在注册表中添加var时启动了该进程,则该进程看不到新的环境var,除非它管理系统广播的特殊事件,通知环境变量已被修改(即方式Explorer.exe正在运行。)