Я хотел бы добавить переменную среды на машину Windows (рабочий стол или сервер) и иметь возможность использовать ее без перезагрузки этой машины.
Допустим, у вас есть производственный сервер, на котором размещено множество приложений, а новому приложению требуется определенная переменная среды для запуска. Вы не хотите перезагружать его, пока пользователи подключены к другим вашим приложениям. Какие у вас есть варианты? Мне не нравится вариант подождать, пока не наступит подходящее время для перезагрузки. Должен быть способ получше. Что мне не хватает?
Изменения переменных среды должны вступить в силу немедленно, если вы сделаете изменение в главном диалоговом окне «Свойства» для рассматриваемого компьютера (перейдите в раздел «Мой компьютер | Свойства | Дополнительно | Переменные среды»). После сохранения изменений Explorer передает сообщение WM_SETTINGCHANGE
сообщение для всех окон, чтобы проинформировать их об изменении. Любые программы, созданные через проводник после этого, должны получить обновленную среду, хотя уже запущенные программы не получат, если они не обработают сообщение об изменении настройки.
Из описания вашей проблемы я не могу сказать, какая у вас конкретная проблема. Не могли бы вы рассказать нам больше о конкретном сценарии, который не работает?
Эта статья базы знаний также может быть полезна: Как распространить переменные среды в систему
runas /user:yourusername@yourdomain cmd
taskkill /f /im explorer.exe
explorer.exe
Теперь, закрыв все командные строки, вы увидите, что PATH
переменная действительно обновлена.
Все командные запросы должны быть закрыты. Снова откройте новую командную строку, введите путь, и вы увидите новые данные.
Следует иметь в виду, что многие программы получают переменные среды при первом запуске, поэтому, хотя Windows может не нуждаться в перезапуске, некоторым программам может потребоваться, прежде чем они смогут использовать новые переменные. Хорошим примером этого является открытие нового окна командной строки после добавления PATH (да, меня это сбило с толку).
Хотя у меня недостаточно репутации, чтобы прокомментировать ответ на этот вопрос, получивший наибольшее количество голосов, я хотел бы заявить, что это не совсем правильно. Я знаю это, потому что независимо от того, какой обходной путь я пробовал в этом посте, на самом деле ничего не работало.
В статья kb, на которую есть ссылка в этом ответе на самом деле заявляет, что:
Однако обратите внимание, что изменения переменных среды не приводят к немедленным изменениям. Например, если вы запустите другую командную строку после внесения изменений, переменные среды будут отражать предыдущие (не текущие) значения. Изменения не вступят в силу, пока вы не выйдете из системы, а затем снова не войдете в нее.
То, что переменные среды сбрасываются на предыдущие значения после перезагрузки командной строки, - это именно то, что я испытал в Windows Server 2008.
В статье говорится:
Чтобы выполнить эти изменения без выхода из системы, рассылайте сообщение WM_SETTINGCHANGE всем окнам в системе, чтобы любые заинтересованные приложения (такие как проводник Windows, диспетчер программ, диспетчер задач, панель управления и т. Д.) Могли выполнить обновление.
Это не означает, что Explorer передает сообщение WM_SETTINGCHANGE после того, как вы изменили системные переменные среды, или что оно действительно работает. Я не уверен, как бы вы сделали то, что предлагается в статье базы знаний (для немедленного распространения изменений) из командной строки.
Сделайте env. переменная доступна сразу:
1. Open a shell
В зависимости от переменной среды, которую вы хотите изменить, сделайте следующее: (предположим, что вы хотите добавить новый ПУТЬ для недавно установленного приложения) Итак, в приглашении оболочки введите следующее:
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
Возможное решение для служб - временно запустить их от имени другого пользователя (кроме LocalSystem, LocalService, NetworkService). Например, для службы Apache это работает без проблем. Чтобы изменить учетную запись службы, откройте консоль services.msc, выберите службу, щелкните свойства службы и на второй вкладке введите учетные данные для входа для пользователя. Перезапустите службу, и ее переменные среды должны быть обновлены.
Если это пользователь, который вошел в систему, это должно работать без проблем. Если вы используете текущую учетную запись пользователя, то также может потребоваться перезапуск explorer.exe. Также обратите внимание, что запуск служб от имени обычной учетной записи пользователя может создать угрозу безопасности.
Поскольку люди еще не добавили этот ответ, я хотел бы упомянуть, что вы можете установить постоянные системные переменные, которые сохраняются после перезагрузки с помощью команды SETX.
например
setx PATH "%PATH%;c:\temp\my\new\path"
Обратите внимание, что приведенное выше не будет работать в текущем командном окне и потребует от вас открыть новое командное окно, прежде чем оно вступит в силу. В результате, в зависимости от варианта использования; вам может потребоваться совместить это с одним из других методов, описанных выше.
Для получения дополнительных сведений см. Следующий URL-адрес.: