Các biến môi trường được lưu trữ trong registry là ở đâu?


190

Tôi cần truy cập một biến môi trường từ xa. Để thực hiện điều này, tôi nghĩ cách tốt nhất là để đọc nó từ registry.

Các biến môi trường được lưu trữ trong registry là ở đâu?

Câu trả lời:


282

Đây là nơi chúng được lưu trữ trên XP thông qua Server 2012 R2:

Biến người dùng

HKEY_CURRENT_USER\Environment

Biến hệ thống

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

7
Hãy nhớ khởi động lại hệ thống của bạn để thay đổi có hiệu lực.
0x6B6F77616C74

22
Bạn không cần phải khởi động lại. Chỉ cần giết Explorer.exe và mang nó trở lại sống động. Đó là quá trình cha mẹ cho ví dụ cmd.exe (khi bắt đầu từ menu Start)
Cristian Diaconescu

2
Còn về các quy trình khác - như IIS thì sao? Tôi đoán Explorer.exe không phải là cha mẹ đối với những người, do đó, một khởi động lại sẽ là cần thiết?
Colin

3
Các quá trình đọc trong các biến env hệ thống tại thời điểm chúng bắt đầu. Vì vậy, với một cái gì đó như IIS, khởi động lại dịch vụ đó sẽ mang lại các giá trị được cập nhật.
Steve Scheffler

11
Các biến đường dẫn người dùng (Tài liệu của tôi, AppData, v.v.) được lưu trữ tạiHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
huyền thoại

22

Tôi nhận ra điều này đã cũ nhưng có một cách hiệu quả hơn để làm điều này trong Windows 7. SETX được cài đặt theo mặc định và hỗ trợ kết nối với các hệ thống khác.

Để sửa đổi một hệ thống từ xa các biến môi trường toàn cầu, bạn sẽ sử dụng

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

Điều này không yêu cầu khởi động lại explorer.


9
Hãy cẩn thận với điều này, vì setx cắt ngắn mọi thứ sau 1024 charachters !!! superuser.com/questions/387619/ trên
WalyKu

5

cmd:

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

Quyền hạn:

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

Powershell / .NET: (xem https://msdn.microsoft.com/en-us/l Library / system.en môivariabletarget (v = vs.110) .aspx )

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

3

Tôi luôn gặp vấn đề với điều đó, tôi đã tạo một 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.