【问题标题】:PowerShell Enviromental Variable not seen?没有看到 PowerShell 环境变量?
【发布时间】:2014-08-03 20:30:00
【问题描述】:

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

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

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

 Get-ChildItem Env:

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

我的下一个尝试是创建一个 Env。变量。通过 PowerShell: "TestVariable"="test Value" 但我的程序使用 kernel32.dll 找不到它:

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

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

提前致谢, 古力

【问题讨论】:

    标签: windows powershell environment-variables


    【解决方案1】:

    这不是那么简单。

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

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

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

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

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

    HKEY_CURRENT_USER\Environment
    

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

    【讨论】:

    • 我找到了办法——终于!我“预先设置”了我需要的变量:开始菜单=>计算机=>属性=>高级系统设置=>环境变量=>系统变量=>新建..这样定义我可以通过 PowerShell 读写我的程序 - 哦,我的上帝。正如我们用德语所说:从后面穿过眼睛。谢谢你!
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2017-09-08
    • 2021-10-20
    相关资源
    最近更新 更多