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


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.