Где хранятся переменные среды для cmd.exe? - PullRequest
0 голосов
/ 06 июня 2019

Я знаю, как найти переменные среды на моем компьютере с Windows 10.

Однако, есть другие переменные, которые перечислены, когда я запускаю set в cmd.exe, и когда я запускаю команду set ENV_VAR=val в cmd.exe, он сохраняет дополнительные переменные среды, которые не не, похоже, хранятся в том же месте, что и глобальные и пользовательские переменные среды.

Примеры: APPDATA, HTTP_PROXY, SystemRoot, USERDNSDOMAIN

Где они хранятся?

Ответы [ 3 ]

2 голосов
/ 06 июня 2019

Оболочка cmd.exe динамически создает некоторые псевдопеременные.Они не определены статически.Я не знаю о HTTP_PROXY.

CD
RANDOM
DATE
TIME
ERRORLEVEL

Остальные контролируются системой.Маловероятно, что какая-то польза будет от их изменения.

APPDATA
SystemRoot
USERDNSDOMAIN
1 голос
/ 07 июня 2019

https://winsourcecode.blogspot.com/2019/05/listenvironmentexe-list-system-user.html - это программа, в которой перечислены системные, пользовательские и изменчивые переменные, а также результирующие переменные среды процесса. В нем также перечислены динамические переменные, подробно описанные в справке.

--------
System
--------
ComSpec=%SystemRoot%\system32\cmd.exe
DriverData=C:\Windows\System32\Drivers\DriverData
Link=/pdb:none /MAPINFO:LINES
NUMBER_OF_PROCESSORS=4
Etc

--------
Volatile - These are set at logon
--------
LOGONSERVER=\\DESKTOP-UCDGI39
USERDOMAIN=DESKTOP-UCDGI39
HOMEDRIVE=C:
USERDOMAIN_ROAMINGPROFILE=DESKTOP-UCDGI39
Etc    

--------
User - These override system variables, and in the case of PATH are added to the system PATH
--------
MSDevDir=C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98
Etc

--------
Process - This is the combined environment from the above for the program
          Variables starting with an equals sign, such as =C:=C:\Windows are internal CMD variables
          CMD simulates a default directory per drive like MSDos. This is how it keeps track
--------
=C:=C:\Windows\System32
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=DESKTOP-UCDGI39
ComSpec=C:\WINDOWS\system32\cmd.exe
DriverData=C:\Windows\System32\Drivers\DriverData
HOMEDRIVE=C:
HOMEPATH=\Users\David Candy
Etc

--------
Dynamic - These are updated each time they are used
--------
CD
DATE
TIME
RANDOM
ERRORLEVEL
CMDEXTVERSION
CMDCMDLINE
HIGHESTNUMANODENUMBER

Переменные среды создаются при входе в систему и передаются в оболочку Explorer.exe. Отныне они только в памяти. Любая программа Explorer запускается, incl cmd.exe получает копию памяти окружения проводника. Если вы запускаете программу из cmd.exe, она получает копию памяти окружения CMD. Программы не могут получить доступ к памяти других программ, так что это только один способ. Если программа изменяет переменную, которую может видеть только эта программа, или программы, которые она запускает после ее изменения. Блок памяти программы выбрасывается при выходе из программы.

SetX уведомляет все программы об изменении среды. Однако ЕДИНСТВЕННАЯ известная программа, которая слушает это, является Explorer.exe. CMD не слушает это сообщение. Смотрите https://docs.microsoft.com/en-us/windows/desktop/winmsg/wm-settingchange, как это происходит. Таким образом, после использования SetX или вашей программы, отправляющей сообщение, новые программы, включая CMD.exe, запущенные Explorer, будут иметь изменения. Существующие программы не будут. Существующие запустят другие программы с копией своего уже устаревшего блока среды.

Распространенный вопрос - как запустить setx, а также заставить его вступить в силу немедленно. Ответ: ты не можешь. Таким образом, вы запускаете Setx для будущего и Set для текущего экземпляра CMD.exe.

0 голосов
/ 06 июня 2019

Будьте осторожны: когда вы запускаете команду SET в командной строке, они просто остаются в вашей подсказке, но как только вы закрываете эту подсказку, они теряются, поэтому фактически они просто сохраняются в оперативной памяти вашего командная строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...