В чем разница между% WinDir% и% SystemRoot%?

33

В чем разница между% Windir% и% Systemroot% в пути к Windows?
Они оба показывают местоположение папки «Windows».

Амирреза Насири
источник

Ответы:

34

Чтобы расширить ответ г-на Дейва, %SystemRoot%это встроенная переменная (наряду с небольшой горсткой других подобных %SystemDrive%). То есть он фактически не определен в хранилище переменных среды HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environmentв реестре.

С другой стороны, %windir%является обычной переменной и определяется в хранилище переменных как %SystemRoot%. (Не существует аналога «реальной переменной» %SystemDrive%.)

Какой из них использовать, на самом деле не имеет значения, но вы можете столкнуться с проблемами расширения переменных в пакетных файлах, и в этом случае вы можете попробовать другой. (Я не помню, чтобы у меня были проблемы с этим, но об этом стоит помнить.)

Кроме того, %SystemRoot%%SystemDrive%) задаются в процессе установки (при выборе целевого диска) и, таким образом, доступны с самой ранней точки при установке Windows, тогда как %windir%при установке они устанавливаются позже, поэтому, если вы создаете некоторые вид пользовательской установки (например, OEM, PE и т. д.), которую вы захотите использовать %SystemRoot%.

Synetech
источник
Итак,% windir% построен ПОСЛЕ установки?
Амирреза Насири
2
Нет, во время установки, но после %SystemRoot%. Windows имеет достаточно информации для установки SystemDriveи, SystemRootкак только вы выбираете диск, на который ее установите (плюс она использует значение по умолчанию, если вы не изменяете место назначения). Он устанавливает несколько переменных среды по умолчанию (включая windir) позже в процессе установки, когда инициализирует реестр. Это имеет значение, только если вы изменяете процесс установки.
Synetech
в этом случае вы можете попробовать другой . Я предполагаю , что другой является %windir%. Это правильно?
Рене Ниффенеггер
27

На Win 7 %SystemRoot%системная переменная %windir%доступна только для чтения, но может быть изменена и по умолчанию установлена ​​как windir=%SystemRoot%. ОС опирается на %SystemRoot%. Согласно Википедии , %WinDir%Windows предшествует Windows NT и, похоже, заменена %SystemRoot%.

Дейв
источник
1

забавный факт - (в Windows 10 1809)% windir% по-прежнему настолько важен, что вы не можете запустить что-либо с повышенными правами без этого ... что означает, что вы НЕ МОЖЕТЕ НАСТОЯЩИМ ОСТАВИТЬСЯ, потому что попадание в реестр переменных среды, очевидно, требует повышения :( ... к счастью, безопасный режим позволил мне восстановить эту переменную и продолжить работу

Beej
источник