Почему изменения в моем PATH не распознаются?


36

Когда я обновляю свой PATH, используя либо встроенное диалоговое окно Environment Variables, либо что-то вроде Path Editor , а затем открываю командную строку, изменения в моем PATH не будут регистрироваться в консоли, в зависимости от того, где была командная строка. началось с.

Например, если я редактирую свой PATH, а затем запускаю cmd.exe из меню «Пуск» или ярлыка на рабочем столе, то мой PATH выглядит нормально: он успешно обновлен; Однако, если я начну cmd.exe с ярлыка в любом другом , чем в меню Пуск или на рабочем столе, новый путь не читается , и я получаю старый путь вместо этого. Это очень странно

Я попытался запустить командную строку с помощью ярлыка на рабочем столе, и он работает нормально; Затем я копирую тот же самый ярлык в подпапку на рабочем столе, и у меня возникает проблема отсутствия обновления PATH.

Я понимаю, что это довольно сложно объяснить, поэтому я создал скринкаст, чтобы показать эту проблему в действии .

Вот снимок экрана ярлыка командной строки, показанный на этом скриншоте:

Настройки ярлыка командной строки

Это на Windows Vista Home Premium SP2.

Ответы:


30

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


2
Однако основной explorerпроцесс обнаружит изменения среды в реестре (к которому относится диалоговое окно rundll32) и автоматически обновит собственную среду. (По крайней мере, в XP это так.) Вот почему изменения видны при запуске cmdс ярлыка.
Гравитация

Роуланд, это дало мне достаточно информации, чтобы точно выяснить, почему это произошло, хотя и не дало полного ответа на мой вопрос. Смотрите мой собственный ответ для деталей. Благодарность!
Чарльз Ропер

Спасибо за этот ответ! Все, что мне нужно было сделать, это закрыть командную строку и открыть ее снова.
user1477388

Это было решением для меня! Я использую Git Bash для Windows в многопользовательской оболочке (ConEmu) и удивился, почему echo $PATHон не работает. Я предполагал, что это будет свежо, но не получилось, пока я не закрыл все вкладки Git Bash и ConEmu.
Олив Утило

27

Как предполагает Роуланд, при запуске нового процесса он будет считывать переменные среды из процесса, который его запускает. Поэтому при запуске командной строки из меню «Пуск» или с рабочего стола она считывает переменные среды, из explorer.exeкоторых, как предполагает grawity, обнаруживает изменения параметров среды в реестре, и, таким образом, я вижу мой новый PATH в командной строке, запущенной из Рабочий стол или меню Пуск.

Причина, по которой я не вижу обновлений моего PATH в размещенной мною экранной трансляции, заключается в том, что я изначально запустил окно обозревателя, используя FARR для создания FindAndRunRobot.exeродительского процесса. FARR не обнаруживает автоматически изменения среды, поэтому порожденные из него дочерние процессы не получают новый PATH. У меня также была опция « Запускать окна папок в отдельном процессе », установленная в Проводнике, что означает, что все окна explorer.exe, которые я открыл после начального, открытого FARR, где также находятся дочерние элементы FARR .

При отключении опции « Запускать окна папок в отдельном процессе » новые explorer.exeпроцессы не создаются в FARR, что решает мою проблему. Тем не менее, я также запускаю консольные окна и другие вещи прямо из FARR; они также получают старые настройки среды. Если я перезапущу FARR, то будут распространены новые настройки среды.

Вот скриншот Process Explorer, показывающий процессы, порожденные FARR. Ни один из этих процессов не получит новые параметры среды от верхнего уровня, explorer.exeесли я не перезапущу FARR:

исследователь процесса


3
Почему мой ответ был отклонен? Если в этом есть недостаток, дайте мне знать, и я постараюсь это исправить.
Чарльз Ропер

иметь большой смысл.
lwpro2
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.