Когда я обновляю свой PATH, используя либо встроенное диалоговое окно Environment Variables, либо что-то вроде Path Editor , а затем открываю командную строку, изменения в моем PATH не будут регистрироваться в консоли, в зависимости от того, где была командная строка. началось с.
Например, если я редактирую свой PATH, а затем запускаю cmd.exe из меню «Пуск» или ярлыка на рабочем столе, то мой PATH выглядит нормально: он успешно обновлен; Однако, если я начну cmd.exe с ярлыка в любом другом , чем в меню Пуск или на рабочем столе, новый путь не читается , и я получаю старый путь вместо этого. Это очень странно
Я попытался запустить командную строку с помощью ярлыка на рабочем столе, и он работает нормально; Затем я копирую тот же самый ярлык в подпапку на рабочем столе, и у меня возникает проблема отсутствия обновления PATH.
Я понимаю, что это довольно сложно объяснить, поэтому я создал скринкаст, чтобы показать эту проблему в действии .
Вот снимок экрана ярлыка командной строки, показанный на этом скриншоте:
Это на Windows Vista Home Premium SP2.
источник
explorer
процесс обнаружит изменения среды в реестре (к которому относится диалоговое окноrundll32
) и автоматически обновит собственную среду. (По крайней мере, в XP это так.) Вот почему изменения видны при запускеcmd
с ярлыка.echo $PATH
он не работает. Я предполагал, что это будет свежо, но не получилось, пока я не закрыл все вкладки Git Bash и ConEmu.Как предполагает Роуланд, при запуске нового процесса он будет считывать переменные среды из процесса, который его запускает. Поэтому при запуске командной строки из меню «Пуск» или с рабочего стола она считывает переменные среды, из
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:источник