Обновить переменную среды

12

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

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

Дон Ч
источник
На Stackoverflow есть хороший ответ на тот же вопрос .
Хью Аллен
Закройте консоль и откройте новую.
Synetech

Ответы:

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.

wendy.krieger
источник
0

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

файл: env.bat

set FOO=bar

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

% call env.bat

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

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

Акира
источник
0

Это теперь значительно проще, не нужно перезагружать оболочку:

  1. Откройте меню «Пуск» и найдите RefreshEnv.bat
  2. Бегать RefreshEnv.bat

Обратите внимание, что добавленные вами переменные среды доступны в любом новом экземпляре Command / Powershell, проверив обновление.

Лэнс Маккарти
источник
Что ты имеешь в виду сейчас? С какой версии? Этот файл bat доступен в Windows?
Матэ Юхас