Вопрос: Как добавить переменную среды Windows без перезагрузки?


Вероятно, это легкий ответ, но я никогда не мог найти его по поиску. Я просто хотел бы добавить переменную среды на компьютер Windows (рабочий стол или сервер) и иметь возможность использовать его без перезагрузки этой машины.

Предположим, у вас есть производственный сервер, на котором размещается множество приложений, а для нового приложения требуется конкретная переменная среды для запуска. Вы не хотите перезагружать его, пока пользователи подключены к вашим другим приложениям. Какой у вас выбор? Мне не нравится опция «дожидаться» до «хорошего времени». Должен быть лучший способ. Что мне не хватает?


158
2018-05-16 04:09


Источник


У меня была такая же проблема. Я где-то читал, что уничтожение процесса explorer.exe приведет к обновлению переменных, и это сработало. Тогда мне просто пришлось запустить проводник из диспетчера задач. - user19694
Вам нужно закрыть командную строку и снова открыть ее снова, чтобы ваши переменные пути обновлялись. Переменные загружаются при запуске cmd. - NiLInfinite


Ответы:


Изменения в переменных среды должны вступить в силу немедленно, если вы внесете это изменение через главный диалог свойств для данного компьютера (перейдите в раздел «Мои компьютеры | Свойства | Дополнительные параметры среды»). После того, как изменения сохранены, Explorer транслирует WM_SETTINGCHANGE сообщение всем окнам, чтобы сообщить им об изменении. Любые программы, порожденные через Explorer, после этого должны получить обновленную среду, хотя уже запущенные программы не будут работать, если только они не обрабатывают сообщение об изменении настроек.

Я не могу сказать из вашей проблемы описание какой конкретной проблемы у вас с этим. Не могли бы вы рассказать нам больше о конкретном сценарии, который не работает?

Эта статья также может быть полезной: Как распространять переменные окружения в систему


150
2018-05-16 04:16



Ок, я думаю, я, должно быть, видел это поведение на запущенной службе или что-то в этом роде. Я добавил новую переменную среды, используя метод, описанный выше. Затем я смог увидеть значение после открытия новой командной строки и с помощью команды «echo% <myvar>%. Спасибо вам за ваши ответы. - Chad Braun-Duin
Для пользователей PowerShell этот фрагмент может помочь: poshcode.org/2049 - Anders Zommarin
Если вы используете cmd, вам нужно перезапустить его, если переменная env variable - Neil McGuigan
Просто установил Scala на моем ПК, но PATH не обновлялся; предположительно MSI не транслировала сообщение WM_SETTINGCHANGE. Я добавил фиктивную переменную SYSTEM, то есть CHANGE_TO_UPDATE = z, которую я обновляю, чтобы вызвать сообщение WM_SETTINGCHANGE - проблема решена - Darren Bishop
Спасибо за CHANGE_TO_UPDATE = z, это именно то, что я хотел. Это сработало для меня, и мне не пришлось перезагружаться. - iopq


  1. В командной строке введите: runas /user:yourusername@yourdomain cmd
  2. Он откроет новую подсказку cmd, а затем введите: taskkill /f /im explorer.exe
  3. Затем введите: explorer.exe

Теперь, после закрытия всех команд, вы увидите, что PATH переменная была действительно обновлена.

Все командные подсказки должны быть закрыты. Повторно запустите новую командную строку, введите путь, и вы увидите новые данные.


53
2018-03-20 06:36



Из всех ответов на этой странице это единственный, который действительно работал для меня. Спасибо!! - CoreDumpError
+1 ....................... - IJas
Это сработало для меня. Я думаю, проблема заключается в том, что если вы запустите cmd через explorer (чтобы сохранить вас, чтобы набирать длинные пути), Explorer никогда не закрывается, даже если вы закроете все окна браузера. Спасибо за решение :) - Steve Mc
Работал для меня. Вы также можете просто использовать диспетчер задач, чтобы убить задачи проводника и перезапустить его (Файл> Запустить новую задачу). - adabyron
Гм. Пожалуйста, не убивайте Windows Explorer, если один из его процессов не зависает. Вместо этого откройте диалоговое окно окон выключения и отмените его, удерживая ctrl+alt+shift, Это будет чисто выход из окна Explorer. В Vista + диалог окон выключения сложнее найти (но все же присутствует, по крайней мере, через 7 (неуверенность около 8 и 10)), поэтому существует второй метод. ctrl + shift + щелкните правой кнопкой мыши в пустой части меню «Пуск» и выберите «exit explorer». В 8 опция выхода такая же, но вы используете панель задач не в меню «Пуск». - Kevin Cathcart


Следует иметь в виду, что многие программы получают переменные среды при первом запуске, поэтому, хотя для окон может не понадобиться перезагрузка, некоторые программы могут до этого использовать новые переменные. Хорошим примером этого является открытие нового окна командной строки после добавления PATH (да, я с этим справился).


16
2018-05-16 06:11



Эти проблемы влияют на ВСЕ УСЛУГИ, даже перезапущенная служба не увидит новых переменных среды. - gimel
Вы уверены, что это не из-за совместного использования процесса svchost? - Mark Sowul


Хотя у меня недостаточно репутации, чтобы прокомментировать самый высокий голосовой ответ на этот вопрос, я хотел бы заявить, что это не совсем правильно. Я знаю это, потому что независимо от того, какое решение, которое я пробовал в этом посте, ничего не работало.

Кб-статья, связанная с этим ответом фактически заявляет, что:

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

Часть переменных среды, возвращающихся к предыдущим значениям после перезагрузки командной строки, - это то, что я испытал в Windows Server 2008.

Далее в статье говорится:

Чтобы выполнить эти изменения без необходимости выхода из системы, передайте сообщение WM_SETTINGCHANGE всем окнам в системе, чтобы любые заинтересованные приложения (такие как Проводник Windows, Диспетчер программ, Диспетчер задач, Панель управления и т. Д.) Могли выполнить обновление.

Это не означает, что Explorer передает сообщение WM_SETTINGCHANGE после того, как вы изменили переменные системной среды или что она действительно работает. Я не уверен, как вы будете делать то, что предлагается в статье KB (для немедленного распространения изменений) из командной строки.


12
2017-11-26 22:30





Сделайте env. переменная доступна сразу:

1. Open a shell

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

2. PATH=%PATH%;C:\type\your\new\path\here

убедитесь, что ваш новый путь добавлен в переменную среды

3. echo %PATH%

Готово.

Сделать переменную доступной при перезагрузке

1. Press WinLogoKey+Pause/Break
2. On the left pane, press 'Advanced System Settings'
3. On the 'Advanced' tab, click 'Environment Variables'
4. In 'System Variables' choose the one you want to modify
5. Click Ok

Протестировано и работает в Windows 7/10


4
2017-11-18 17:00





Возможное решение для служб - временно запустить их как другого пользователя (кроме LocalSystem, LocalService, NetworkService). Например, для службы Apache это работает без проблем. Чтобы изменить сервисную учетную запись open services.msc, выберите службу, щелкните свойства службы, а на второй вкладке введите учетные данные для входа пользователя. Перезапустите службу, и ее переменные среды должны быть обновлены.

Если это пользователь, который был зарегистрирован, это должно работать без проблем. Если вы используете текущую учетную запись пользователя, может потребоваться перезагрузка explorer.exe. Также обратите внимание, что запуск служб как обычной учетной записи пользователя может привести к угрозам безопасности.


3
2017-08-09 20:26