Де в реєстрі зберігаються змінні середовища?


191

Мені потрібно віддалено отримувати доступ до змінної середовища. Для цього я думаю, що найкращий спосіб - це прочитати його з реєстру.

Де в реєстрі зберігаються змінні середовища?

Відповіді:


283

Ось де вони зберігаються на XP через Server 2012 R2:

Змінні користувача

HKEY_CURRENT_USER\Environment

Системні змінні

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

7
Не забудьте перезапустити систему, щоб застосувати зміни.
0x6B6F77616C74

22
Вам не потрібно перезавантажувати. Просто вбийте Explorer.exe і поверніть його живим. Це батьківський процес, наприклад, cmd.exe (коли запускається з меню «Пуск»)
Крістіан Діаконеску

2
Як щодо інших процесів - як IIS? Я здогадуюсь, що Explorer.exe не є батьківським для них, тому потрібен буде перезапуск?
Колін

3
Процеси, що читаються в системних змінних env під час їх запуску. Тож із чимось на зразок IIS, перезапуск цього сервісу повинен вносити оновлені значення.
Стів Шеффлер

11
Змінні шляху користувача (Мої документи, AppData тощо) зберігаються вHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
mythofechelon

22

Я розумію, що це старе, але є більш ефективний спосіб зробити це в Windows 7. SETX встановлений за замовчуванням і підтримує підключення до інших систем.

Для зміни глобальних змінних оточення віддалених систем ви б використовували

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

Для цього не потрібно перезапустити провідник.


9
Будьте обережні з цим, оскільки setx обрізає все після 1024 характерів !!! superuser.com/questions/387619/…
WalyKu

5

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: (див. Https://msdn.microsoft.com/en-us/library/system.environmentvariabletarget(v=vs.110).aspx )

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

3

У мене завжди були проблеми з цим, я робив getx.bat:

::getx %envvar% [\m]
::reads envvar from user enviroment variable and stores it in getxvalue variable
::with \m read system enviroment

@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 delimiter
@FOR /F "delims=    " %%A IN (getxfile.tmp.txt) DO (
    @set getxvalue=%%A
)
@del getxfile.tmp.txt

@echo ON
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.