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

181

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

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

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

Ответы:

162

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

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

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

Чарли
источник
2
Ладно, наверное, я видел такое поведение на работающем сервисе или что-то в этом роде. Я добавил новую переменную среды, используя метод, описанный выше. Затем я смог увидеть значение после открытия новой командной строки и использования команды "echo% <myvar>%. Спасибо вам обоим за ваши ответы.
Чад Браун-Дуин
5
Для пользователей PowerShell этот фрагмент может быть полезен
Андерс Зоммарин,
8
Если вы используете cmd, вы должны перезапустить его, если измените переменную env
Нил МакГиган,
4
Просто установил Scala на мой компьютер, но PATH не обновлялся; предположительно, MSI не транслировал сообщение WM_SETTINGCHANGE. Я добавил фиктивную переменную SYSTEM, т.е. CHANGE_TO_UPDATE = z, которую я обновляю, чтобы вызвать сообщение WM_SETTINGCHANGE - проблема решена
Даррен Бишоп
3
404 за ссылку :-(
Самоф
63
  1. В командной строке введите: runas /user:yourusername@yourdomain cmd
  2. Откроется новое приглашение cmd, затем введите: taskkill /f /im explorer.exe
  3. Затем введите: explorer.exe

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

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

Рон и Ким Стенгель
источник
6
Из всех ответов на этой странице, это единственный, который действительно работал для меня. Спасибо!!
coredumperror
2
Это сработало для меня. Я думаю, проблема в том, что если вы запускаете cmd через проводник (чтобы избавить вас от необходимости вводить длинные пути), то проводник никогда не закрывается, даже если вы закрываете все окна проводника. Спасибо за решение :)
Стив Мак
Работал на меня. Вы также можете просто использовать диспетчер задач, чтобы убить задачи проводника и перезапустить его («Файл»> «Запустить новую задачу»).
adabyron
7
Гм. Пожалуйста, не убивайте Windows Explorer, если один из его процессов не завис. Вместо этого откройте диалоговое окно выключения и отмените его, удерживая ctrl+alt+shift. Это будет чисто выйти из Windows Explorer. В Vista + диалоговое окно выключения труднее найти (но все еще присутствует, по крайней мере, через 7 (не уверены около 8 и 10)), поэтому существует второй метод. Ctrl + Shift + щелчок правой кнопкой мыши в пустой части меню «Пуск» и выберите «Проводник выхода». В 8 опция выхода та же, но вы используете панель задач, а не меню «Пуск».
Кевин Кэткарт
1
+1 Это работает как очарование в Windows 7. К вашему сведению, я просто использовал CTRL + ALT + SHIFT, и из диспетчера задач Windows я убил весь процесс explorer.exe, а затем снова запустил его, нажав кнопку « Новая задача» .
Марко Демайо,
19

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

nedm
источник
3
Эта проблема затрагивает ВСЕ УСЛУГИ, даже перезапущенная служба не увидит новые переменные среды.
Гимел
1
Вы уверены, что это не из-за совместного использования процесса svchost?
Марк Совул
16

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

Кб статья связана с тем , что ответ на самом деле говорится , что:

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

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

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

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

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

TestWorks
источник
1
Это единственный ответ, который подходит мне. Ни один из других, в том числе убийство Explorer или «правильный» способ, не имеет никакого значения.
Хашим
4

Сделайте 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

Педро Соуза
источник
3

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

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

Один
источник
1

Поскольку люди еще не добавили этот ответ, я хотел бы упомянуть, что вы можете установить постоянные системные переменные, которые выживут после перезагрузки с помощью команды SETX.

например

setx PATH "%PATH%;c:\temp\my\new\path"

Обратите внимание, что вышеописанное не будет работать в текущем командном окне и потребует от вас открыть новое командное окно, прежде чем оно вступит в силу. В результате в зависимости от варианта использования; Возможно, вам придется комбинировать это с одним из других методов, описанных выше.

Пожалуйста, смотрите следующий URL для получения дополнительной информации :

Doug
источник
не работает: / "неверный синтаксис"
Джо Д.Ф.
1
Попробуй. Видимо, нужны были двойные кавычки.
Даг
Спасибо, да я понял .... кроме того, что я получаю предупреждение об усечении, поэтому я не могу добавить к нему ... :(
Джо Д.Ф.