Чому зміни в моєму PATH не розпізнаються?


36

Коли я оновлюю свій PATH, використовуючи або вбудований діалог змінних середовищ, або щось на зразок редактора шляхів , а потім відкриваю командний рядок, зміни в моєму PATH не реєструватимуться в консолі, залежно від того, де був командний рядок. розпочато з.

Наприклад, якщо я редагую свій PATH, а потім запускаю cmd.exe з меню «Пуск» або ярлик на робочому столі, то мій PATH виглядає чудово: він був успішно оновлений; однак, якщо я запускаю cmd.exe з ярлика в будь-якому іншому місці, крім меню «Пуск» або «Робочий стіл», новий PATH не читається, і я отримую замість нього старий шлях. Це дуже дивно.

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

Я усвідомлюю, що це досить важко пояснити, тому я створив скріншот, щоб показати це питання в дії .

Ось скріншот ярлика командного рядка, як видно на екрані:

Параметри швидкого доступу командного рядка

Це на Windows Vista Home Premium SP2.

Відповіді:


30

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


2
Однак основний explorerпроцес виявить зміни середовища в Реєстрі (належить діалогове вікно rundll32) та оновить власне середовище автоматично. (Принаймні, у XP це робиться.) Ось чому зміни видно, коли починається cmdіз ярлика.
grawity

Роуленд, це дало мені достатньо інформації, щоб вирішити, чому саме це сталося, хоча це не відповіло на моє запитання повністю. Дивіться власну відповідь для деталей. Спасибі!
Чарльз Ропер

Дякую за цю відповідь! Все, що я повинен був зробити, це закрити моє командне вікно та відкрити його знову.
користувач1477388

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

27

Як пропонує Роуленд, при запуску нового процесу він буде читати змінні середовища з процесу, який його запускає. Тому при запуску командного рядка з меню "Пуск" або на робочому столі він зчитує змінні середовища, з explorer.exeяких, як підказує grawity, виявляє зміни в налаштуваннях середовища в реєстрі, і таким чином я бачу свій новий PATH у командно-підказових запитах. Меню робочого столу або меню "Пуск".

Причиною того, що я не бачу оновлень свого PATH в екрані, який я розмістив, це тому, що я спочатку запустив вікно провідника за допомогою FARR, роблячи FindAndRunRobot.exeбатьківський процес. FARR не автоматично визначає зміни в оточуючому середовищі, і, таким чином, породжені від нього дочірні процеси не вибирають нову PATH. У мене також було встановлено параметр " Запустити вікна папок в окремий процес ", який означає, що всі windowsr.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.