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