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.