33

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

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

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

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

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

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

Это на Windows Vista Home Premium SP2.

2 ответа2

27

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

23

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .