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

<p>я хотел бы добавить переменную окружения на компьютер windows (настольный компьютер или сервер) и иметь возможность использовать его без перезагрузки этого компьютера.</p><p>допустим, у вас есть рабочий сервер, на котором размещены различные приложения, а для запуска нового приложения требуется определенная переменная среды. вы не хотите перезагружать его, когда пользователи подключены к другим вашим приложениям. какой у вас есть выбор? мне не нравится опция "ждать, пока наступит хорошее время для перезагрузки". должен быть лучший способ. что мне не хватает?</p>

<p>изменения переменных среды должны вступить в силу немедленно, если вы сделаете это изменение в главном диалоговом окне "свойства" для рассматриваемого компьютера (перейдите в "мой компьютер | свойства | дополнительно | переменные среды"). после сохранения изменений explorer транслирует <code>wm\_settingchange</code> сообщение всем окнам, чтобы сообщить им об изменениях. любые программы, порожденные через проводник после этого, должны получить обновленную среду, хотя уже запущенные программы не получат, если они не обрабатывают сообщение об изменении настроек.</p><p>я не могу сказать из вашего описания проблемы, какая конкретно у вас проблема с этим. можете ли вы рассказать нам больше о конкретном сценарии, который не работает?</p><p>эта статья базы знаний также может быть полезна: <a href="http://support.microsoft.com/kb/104011">как распространить переменные среды в системе</a> </p>

<ol> <li>в командной строке введите: <code>runas /user:yourusername@yourdomain cmd</code></li> <li>откроется новый запрос cmd, затем введите: <code>taskkill /f /im explorer.exe</code></li> <li>затем введите: <code>explorer.exe</code></li> </ol><hr><p>теперь, закрыв все командные строки, вы увидите, что переменная <code>path</code> действительно обновлена.</p><p>все командные строки должны быть закрыты. снова откройте новую командную строку, введите путь, и вы увидите новые данные.</p>

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

<p>хотя у меня недостаточно репутации, чтобы прокомментировать наиболее высоко оцененный ответ на этот вопрос, я хотел бы заявить, что он не совсем правильный. я знаю это, потому что независимо от того, какой обходной путь я попробовал в этом посте, ничего не получалось.</p><p> <a href="http://support.microsoft.com/kb/104011">kb статья, ссылка на которую есть в этом ответе</a> фактически утверждает, что:</p><blockquote> <p>однако обратите внимание, что изменения переменных среды не приводят к немедленным изменениям. например, если вы запустите другую командную строку после внесения изменений, переменные среды будут отражать предыдущие (а не текущие) значения. изменения не вступят в силу, пока вы не выйдете из системы, а затем снова войдите в систему.</p> </blockquote><p>часть о переменных окружения, сбрасывающих к предыдущим значениям после перезагрузки командной строки, является точно тем, что я испытал в windows server 2008.</p><p>в статье говорится:</p><blockquote> <p>чтобы выполнить эти изменения без выхода из системы, передайте сообщение wm\_settingchange всем окнам системы, чтобы любые заинтересованные приложения (такие как windows explorer, диспетчер программ, диспетчер задач, панель управления и т.д.) могли выполнить обновление.</p> </blockquote><p>это не означает, что explorer транслирует сообщение wm\_settingchange после того, как вы изменили системные переменные окружения или что оно действительно работает. я не уверен, как вы будете делать то, что предложено в статье базы знаний (для немедленного распространения изменений) из командной строки.</p>

<p>сделайте env. переменная доступна сразу:</p><pre><code>1. open a shell </code></pre><p>в зависимости от переменной среды, которую вы хотите изменить, выполните следующие действия: (предположим, вы хотите добавить новый path для недавно установленного приложения). итак, в командной строке введите следующее:</p><pre><code>2. path=%path%;c:\type\your\new\path\here </code></pre><p>проверьте, что ваш новый путь был добавлен в переменную окружения</p><pre><code>3. echo %path% </code></pre><p>выполнено.</p><p>сделать переменную доступной при перезагрузке</p><pre><code>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 </code></pre><p>протестировано и работает на windows 7/10</p>

<p>возможным решением для служб является их временное использование от имени другого пользователя (кроме localsystem, localservice, networkservice). например, для службы apache это работает без проблем. чтобы изменить учетную запись службы, откройте консоль services.msc, выберите службу, нажмите "свойства службы" и на второй вкладке введите учетные данные для входа пользователя. перезапустите службу, и ее переменные среды должны быть обновлены.</p><p>если это пользователь, который вошел в систему, то это должно работать без проблем. если вы используете текущую учетную запись пользователя, то может потребоваться перезапуск explorer.exe. также обратите внимание, что запуск служб с учетной записью обычного пользователя может создать угрозу безопасности.</p>

<p>поскольку люди еще не добавили этот ответ, я хотел бы упомянуть, что вы можете установить постоянные системные переменные, которые выживут после перезагрузки с помощью команды setx.</p><p>например.</p><pre><code>setx path "%path%;c:\temp\my\new\path" </code></pre><p>обратите внимание, что вышеприведенное не будет работать в текущем командном окне и потребует от вас открыть новое командное окно, прежде чем оно вступит в силу. в результате в зависимости от варианта использования; возможно, вам придется комбинировать это с одним из других методов, описанных выше.</p><p> <a href="https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx">см. следующий url для получения дополнительной информации</a> :</p>