У меня есть пакет, который добавляет и удаляет запись (скажем, C:\my_entry) в переменную среды PATH во время установки и удаления соответственно. Я вижу, что запись добавляется / удаляется в / из переменной PATH, проверяя ключ реестра HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path.

Но я наблюдал разные значения переменной среды PATH из командной строки.

После установки

Если я открою командную строку как Win+R, наберу cmd и затем введу, я смогу увидеть C:\my_entry в переменной PATH.

Если я открою командную строку (cmd.exe) из каталога C:\Windows\System32, я не смогу найти C:\my_entry в переменной PATH.

После деинсталляции

Если я открою командную строку как Win+R, введите cmd и затем введу, я все еще смогу увидеть C:\my_entry в переменной PATH, хотя она была удалена из реестра.

Пожалуйста, дайте мне знать, почему значение переменной окружения PATH отличается, если мы открываем командную строку из разных мест? И почему значение переменной среды PATH в командной строке отличается от значения в реестре?

1 ответ1

0

Переменные среды обычно наследуются - новый процесс получает копию из того, что его запустило, а не из реестра. (ProcExp или Process Hacker могут отображать env каждого отдельного процесса вместе с реальной иерархией.)

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

Таким образом, может случиться так, что один процесс Explorer (тот, который обрабатывает оболочку панели задач) обновил свою среду после установки, но один из окон обработки папок этого не сделал. (Или, может быть, вы запустили cmd из стороннего файлового менеджера.)

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