У меня повышенные права на ноутбук, но нет прав администратора. Права администратора необходимы для изменения системных переменных среды. Я ожидал, что если бы я создал переменную среды пользователя с тем же именем, что и системная переменная среды, переменная пользователя переопределит системную переменную, но это не так.
После добавления пользовательской переменной с тем же именем, что и системная переменная, я открыл новое окно cmd и использовал команду echo для отображения переменной. Он показал мне значение системной переменной вместо значения пользовательской переменной.
Я просто хотел подтвердить это ожидаемое поведение и понять причины этого. Я ожидаю, что более специфичные пользовательские настройки переопределяют системные.
У меня Windows 7.
Ответы:
Согласно статье MSKB переменные среды в Windows NT :
Одним заметным исключением является
PATH
переменная, которая является комбинированным результатом системных и пользовательских переменных:В статье также рассматривается одинаковые исключениями для разложения
LibPath
иOs2LibPath
переменных, а также , как те , которые указан вautoexec.bat
обрабатывается. Эти пункты, вероятно, не будут иметь большого значения в сегодняшних типичных условиях.Кредит на этот так ответ
источник
Все, что Twisty Impersonator сказал в своем ответе , верно. Мысль о том, что переменная пути пользователя добавлена, была выделена, и я считаю, что последствия этого различия требуют некоторого дополнительного подхода.
Когда вы выполняете исполняемую программу (или любой исполняемый скрипт, такой как
.bat
,.vbs
и т. Д.), Вам не нужно указывать полный путь.Например, чтобы запустить
java
, вы можете ввести любой из них:Первый пример использует полный путь. Это всегда будет использовать версию Java по этому точному пути.
Второй пример будет проходить через все каталоги в
%Path%
переменной среды в поисках исполняемого файла с именемjava.exe
. Он запустит самый первый найденный файл и прекратит поиск. Если есть два файла с именемjava.exe
где - то на%Path%
, используется только первый из найденных.Третий пример, как и второй, будет перебирать каталоги, перечисленные в
%Path%
. Кроме того, поскольку расширение файла не было предоставлено, список исполняемых расширений файлов добавляется к имени файла в порядке, указанном в%PATHEXT%
переменной среды. Если есть несколько файлов с именемjava.com
,java.exe
,java.bat
и т.д. где - то на%Path%
, используется только первый из найденных.Вы можете просмотреть список расширений исполняемых путей в вашей системе, создав следующий пакетный файл:
На моей машине это:
Что все это значит?
В отличие от других переменных среды, пользовательский путь не позволяет переопределить системный путь. Точно противоположный случай. Из приведенных выше примеров, есть много случаев, когда вы можете изменить версию Java по умолчанию. Однако, если в системном пути уже указана версия Java, именно эта версия ВСЕГДА будет найдена первой, поскольку путь ищется по порядку слева направо, а путь пользователя добавляется справа. со стороны, с системным путем слева.
Что я могу с этим поделать?
Если у вас нет доступа к системным переменным среды, вы не можете переопределить программы по умолчанию в системном пути, используя путь пользователя. (Фактически, это должно быть так, иначе определенные программы перестанут работать правильно, и это откроет вашу систему для вмешательства вредоносного программного обеспечения. Никто не хочет этого.)
Вместо этого вы должны использовать полный путь, если вам нужна конкретная версия.
источник