环境变量存储在 Windows 注册表中的啥位置?

Posted

技术标签:

【中文标题】环境变量存储在 Windows 注册表中的啥位置?【英文标题】:Where are environment variables stored in the Windows Registry?环境变量存储在 Windows 注册表中的什么位置? 【发布时间】:2010-10-09 02:21:15 【问题描述】:

我需要远程访问一个环境变量。为此,我认为最好的方法是从注册表中读取它。

环境变量存储在 Windows 注册表中的什么位置?

【问题讨论】:

【参考方案1】:

这是它们在Windows XP 到Windows Server 2012 R2 上的存储位置:

用户变量

HKEY_CURRENT_USER\Environment

系统变量

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

【讨论】:

记得重启系统以使更改生效。 您不需要重新启动。只需杀死 Explorer.exe 并使其恢复活力。这是例如的父进程cmd.exe(从开始菜单启动时) 其他进程如何——比如 IIS?我猜 Explorer.exe 不是那些的父级,所以需要重新启动? 进程在启动时读取系统环境变量。因此,对于 IIS 之类的东西,重新启动该服务应该会带来更新的值。 用户路径变量(我的文档、AppData 等)存储在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders【参考方案2】:

在 Windows 7 中有一种更有效的方法。SETX 默认安装并支持连接到其他系统。

要修改远程系统的全局环境变量,您可以使用

setx /m /s HOSTNAME-GOES-HERE VariableNameGoesHere VariableValueGoesHere

这不需要重新启动 Windows 资源管理器。

【讨论】:

小心这一点,因为 setx 会截断 1024 个字符之后的所有内容!!! superuser.com/questions/387619/…【参考方案3】:

CMD:

reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
reg query HKEY_CURRENT_USER\Environment

PowerShell:

Get-Item "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Get-Item HKCU:\Environment

Powershell/.NET:(见EnvironmentVariableTarget Enum

[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine)
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)

【讨论】:

【参考方案4】:

我一直有这个问题,我做了一个 getx.bat 脚本:

:: getx %envvar% [\m]
:: Reads envvar from user environment variable and stores it in the getxvalue variable
:: with \m read system environment

@SETLOCAL EnableDelayedExpansion
@echo OFF

@set l_regpath="HKEY_CURRENT_USER\Environment"
@if "\m"=="%2" set l_regpath="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

::REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH /t REG_SZ /f /d "%PATH%"
::@REG QUERY %l_regpath% /v %1 /S

@FOR /F "tokens=*" %%A IN ('REG QUERY %l_regpath% /v %1 /S') DO (
@  set l_a=%%A
@    if NOT "!l_a!"=="!l_a:    =!" set l_line=!l_a!
)

:: Delimiter is four spaces. Change it to tab \t
@set l_line=!l_line!
@set l_line=%l_line:    =    %

@set getxvalue=

@FOR /F "tokens=3* delims=  " %%A IN ("%l_line%") DO (
@    set getxvalue=%%A
)
@set getxvalue=!getxvalue!
@echo %getxvalue% > getxfile.tmp.txt
@ENDLOCAL

:: We already used tab as a delimiter
@FOR /F "delims=    " %%A IN (getxfile.tmp.txt) DO (
    @set getxvalue=%%A
)
@del getxfile.tmp.txt

@echo ON

【讨论】:

以上是关于环境变量存储在 Windows 注册表中的啥位置?的主要内容,如果未能解决你的问题,请参考以下文章

对象的实例变量存储在 JVM 中的啥位置?

常量变量存储在 C 中的啥位置?

ODBC 机器 DSN 设置存储在 Windows 中的啥位置?

git bash 中的 ssh 客户端将它的 known_hosts 文件存储在 Windows 上的啥位置?

软件注册的信息在注册表的啥位置

全局应用程序设置应存储在 Windows 7 的啥位置?