11

Как обновить командную оболочку Windows после изменения переменных среды?

т.е. в bash я могу просто сделать "source ~/.bashrc"

3 ответа3

4

Это действительно зависит от того, как были установлены переменные среды. Если, например, вы использовали команду "SET" в командной строке, это влияет только на текущий экземпляр. С другой стороны, такие команды, как "SETX" будут постоянно корректировать значение переменной среды. SETX гарантирует, что все будущие экземпляры cmd увидят обновление. Это не повлияет на местную среду.

Если переменная среды установлена другим приложением и не обновляется, часто проще всего перезапустить процесс «explorer.exe», выйти из системы и снова войти в нее , либо перезагрузить компьютер. По сути, вам просто нужно сказать проводнику перезагрузить переменные окружения. Если это приложение, которое вы разработали, например установщик, убедитесь, что оно вызывает SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment"); , Это говорит проводнику обновить свой кеш переменных среды.

Это важно, потому что приложения, запущенные другим процессом, наследуют свои переменные среды от своего родителя. Таким образом, если вы запустите cmd из проводника, вы получите переменные так, как их видит проводник.

1

Настройка и восстановление основной среды в Windows - это то, на что люди BartPE потратили много времени.

Основная среда хранится в реестре, но оболочка проводника считывает это по своему адресу. Отсюда он отправляется на каждый сеанс cmd.exe.

SET влияет только на среду cmd. SETX позволяет изменять основную среду, но настройка не отражается в локальной среде.

CONSET и 4NT Фрэнка Вестлейка могут извлекать записи из реестра, но, в частности, без переключателей для основной среды.

Обычно загружаемые окна отслеживают настройки в реестре, а загруженные через minint (то есть, WinPE) - нет. Таким образом, настройка реестра и чтение реестра работают в обоих случаях, но только нормально загруженные окна увидят настройки и передадут их в новую программу cmd, exe.

0

это зависит от того, где вы "устанавливаете" переменные окружения. Эквивалент вашего примера Bash будет выглядеть так:

файл: env.bat

set FOO=bar

и теперь вы обновляете его

% call env.bat

но я думаю, что вы сделали это через диалог windows-system-settings-(или как там его имя). В результате вы действительно изменили реестр. эти параметры реестра отображаются в процессе при запуске нового процесса.

Таким образом, вы можете либо запустить новый процесс (cmd.exe в вашем случае), либо вы можете прочитать разделы реестра, отражающие изменения, которые вы хотите. Вы также можете написать небольшой скрипт .bat / .cmd, который извлекает среду из реестра и изменяет текущую среду (если меня поразит настроение, я сделаю это после обеда).

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