Как оцениваются переменные среды Windows? - PullRequest
19 голосов
/ 26 февраля 2011

Если у меня системная и пользовательская переменная среды с одинаковым именем, как они обрабатываются? Они соединены? Переменная пользователя переопределяет системную переменную? И с учетом этого, если мне нужно что-то добавить в переменную Path, где это удобнее добавить?

Ответы [ 3 ]

15 голосов
/ 26 февраля 2011

Я думаю, что эта статья должна ответить на ваш вопрос: Переменные окружения в Windows NT

Переменные среды пользователя

Переменные среды пользователя могут быть также с панели управления. Пользователь может добавлять, удалять или изменять переменные среды в User Переменные среды для поля пользователя. Эти переменные имеют приоритет над системные переменные среды. Пользователь путь добавляется к системному пути.

11 голосов
/ 15 декабря 2013

Все всплеск говорит в их ответ правильный. Чтобы было абсолютно ясно, существует разница между тем, как оценивается переменная среды пользовательского пути, и другими переменными среды пользователя. Обычная переменная пользовательской среды полностью переопределяет системную переменную с тем же именем, если оба существуют, но только для конкретного пользователя, для которого она указана. Однако переменные пути пользователя обрабатываются по-разному . Он добавляется к переменной системного пути при оценке, а не полностью заменяет ее. Я полагаю, что всплеск заявляет об этом, но они делают это так лаконично, что я думаю, что это нужно объяснить.

4 голосов
/ 17 апреля 2018

Все, что всплеск и Саймон говорят в своих ответах, верно.Идея о том, что переменная пользовательского пути добавляется, была выделена, и я считаю, что последствия этого различия требуют некоторой дополнительной обработки.

Path =% Path% (System);% Path% (User)

Когда вы запускаете исполняемую программу (или любой исполняемый скрипт, такой как .bat, .vbs и т. Д.), Вам не нужно указывать полный путь.

Например, чтобы запустить java, вы можете ввести любой из них:

C:/Program Files (x86)/Java/jre6/bin/java -version

java.exe -version

java -version

В первом примере используется полный путь.При этом всегда будет использоваться версия Java по этому точному пути.

Во втором примере будут проходить все каталоги в переменной среды %Path% в поисках исполняемого файла с именем java.exe.Он запустит самый первый найденный файл и прекратит поиск. Если в %Path% есть два файла с именем java.exe, используется только первый найденный.

Третий пример, как и второй, будет перебирать перечисленные каталогив %Path%.Кроме того, поскольку расширение файла не было предоставлено, список исполняемых расширений файлов добавляется к имени файла в порядке, указанном в переменной среды %PATHEXT%. Если в %Path% есть несколько файлов с именами java.com, java.exe, java.bat и т. Д., Используется только первый найденный.

Вы можете увидетьсписок расширений исполняемых путей в вашей системе путем создания следующего пакетного файла:

@echo off
echo %PATHEXT%
pause

На моем компьютере это:

.COM; .EXE; .BAT;.CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC; .PY

Что все это значит?

В абсолютный контраст с другими переменными среды, пользовательский путь не позволяет переопределить системный путь.Точно противоположный случай.Из приведенных выше примеров, есть много случаев, когда вы можете изменить версию Java по умолчанию.Однако, если в системном пути уже указана версия Java, именно эта версия ВСЕГДА будет найдена первой, поскольку путь ищется по порядку, слева направо, а путь пользователя добавляется справа.со стороны, с системным путем слева.

Что я могу с этим поделать?

Если у вас нет доступа к системным переменным среды, вы не можете переопределить программы по умолчанию в системепуть с использованием пользовательского пути.(Фактически, это должно быть таким, иначе определенные программы перестанут работать правильно, и это откроет вашу систему для подмены вредоносным ПО. Никто не хочет этого.)

Вместо этого вынеобходимо использовать полный путь, если вы должны использовать определенную версию.

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