Rom*_*man 4 windows environment-variables
打开regedit.exe,导航到HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment。创建两个环境变量:
Name Type Data
----- -------------- -----------
zbar REG_SZ water
zfoo REG_EXPAND_SZ %zbar%
Run Code Online (Sandbox Code Playgroud)
打开新的cmd.exe,powershell.exe或者什么。缺少这些变量。注销,然后登录。在cmd.exe窗口类型echo %zbar%-water显示。键入echo %zfoo%和%zbar%已显示,但我希望看到扩展值 - water。
现在。打开 Windows环境变量对话框。更改或创建任何变量(例如zzz=zzz)。重新打开cmd.exe并输入echo %zfoo%- 现在您看到了water!
实际上,我正在使用 PowerShell 脚本创建这些变量。但是这个脚本所做的只是描述了注册表操作。
问题:
zfoo通过打开 Windows环境变量对话框并更改一些变量来强制变量具有正确的值而没有这种魔力?也许我应该调用一些 API,比如[Microsoft.Win32.Registry]::Refresh()?谢谢。
你需要播放的WM_SETTINGCHANGE消息。
请记住:当您修改注册表时,您实际上并未设置任何形式的任何环境变量。环境变量是每个进程内存空间的一部分,每个进程都有自己的设置。他们不在注册表中。您正在更改模板。您需要说服设置实际环境变量的程序重新读取模板并相应地设置它们的环境。为此,您可以广播一条 Windows 消息,告知任何相关方注册表中的模板已更改。Microsoft Windows 资源管理器就是这样一个感兴趣的一方,它会在听到模板已更改时修改自己的环境变量。这些修改随后由 Explorer 产生的任何新进程以正常方式继承。
| 归档时间: |
|
| 查看次数: |
4219 次 |
| 最近记录: |