由另一个程序(以用户身份启动)设置我自己的环境变量使用(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
答案 0 :(得分:2)
这不是那么简单。
在您编写代码的方式Get-ChildItem Env:
中,只有当您的进程(EXE文件)启动PowerShell.exe(允许他的孩子访问)时,才会使用SetEnvironmentVariableW("ToTestVar_001", "ToTestVar.001 11:11:54" )
查看由EXE文件定位的环境var在定位环境变量之后继承他的环境变量。在这种情况下,PowerShell将继承环境变量并将看到它。
它存在另一个设置环境变量的地方,注册表中的那个我指的是使用高级系统属性可以看到的那个:
所有用户的环境变量都存储在:
下HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
特定用户的环境变量全部存储在:
下HKEY_CURRENT_USER\Environment
但是再一次不是那么简单,如果你改变注册表并启动一个进程就可以了,你可以在进程中看到你在注册表中设置的var。但是如果在注册表中添加var时启动了该进程,则该进程看不到新的环境var,除非它管理系统广播的特殊事件,通知环境变量已被修改(即方式Explorer.exe正在运行。)