Windows update path variable

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Mac os используемая память

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

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

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

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

я внес некоторые изменения в %PATH% переменной в реестре. Теперь я хотел бы, чтобы эти изменения применялись без необходимости заходить в систему, перезагружаться или перезагружать Explorer. Есть ли способ это сделать?

Я бы предпочел сделать это с помощью какой-то команды, которые можно поставить в конце .BAT файл, и не хотите использовать какие-либо инструменты, кроме тех, которые поставляются с ОС в новой установке. Это должно быть минимально совместимо с Windows XP SP3, и работа полностью до Windows 7 x64 и Server 2008 R2.

4 ответов

  • изменить путь пользователя или системы в свойствах системы.
  • запуск этого пакетного файла извлекает новые переменные пути с запросом REG.
  • команды FOR анализируют переменные пути из результатов REG.
  • текущий путь обновляется до значений реестра.
  • Я использую ConEmu для своих консолей, и он запускает этот пакетный файл на каждой новой консоли, чтобы обновить путь, поэтому перезагрузка не выполняется необходимый.

задание команды параметр в запусках ConEmu C:\Windows\System32\cmd.ехе с /к переключатель для запуска refreshpath.cmd выше, а затем остаются. Это обновляет путь и оставляет консоль открытой.

C:\Windows\System32\cmd.exe /k refreshpath.cmd

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

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

самый простой способ добавить переменную в путь без перезагрузки-открыть командную строку и ввести: PATH=(VARIABLE);%path% и нажать enter. Чтобы проверить, загружена ли переменная, введите PATH и нажмите enter.

  1. измените переменную PATH из пользовательского интерфейса в переменных среды.
  2. добавьте новую переменную окружения, назовите ее случайной. Может быть, что-то вроде CHANGE_TO_UPDATE и поместить в него случайное значение вроде x.
  3. Не забудьте перезапустить cmd.exe или любая программа, которая должна видеть новую переменную path.
Читайте также:  4pda ace stream media для windows

это на самом деле вызовет настройки для обновления при запуске нового приложения.

Update %PATH% environment variable using NSIS

I’ve read that «Strings longer than $ (1024) will get truncated/corrupted.»

How can I safely update %PATH% environment variable?

5 Answers 5

You can use an alternative NSIS build from the special builds page like the large strings build that defines NSIS_MAX_STRLEN=8192 and should prevent you from breaking the host path.

In practice, on a desktop machine, 1024 byte seems enough, but on a development host with many tools installed (like mine), the path might be broken after manipulation, while the 8192 bytes strings build had never perturbed my machine.

To be very sure, you can add a check on the path length before manipulation and abort the installer with a message in the case where the path would be close to the NSIS_MAX_STRLEN constant before trying to manipulate it.

The real solution is to write a custom plugin or call the Windows API directly with the system plugin so you can avoid the NSIS buffer length limitation:

I prefer using windows command processor ( cmd.exe ) via the NSIS nsExec::Exec command, which allows you to append to the PATH easily like so:

Using this method, CMD.EXE expands the PATH variable internally, safe from any NSIS string length limits. Alternatively, change the order of %PATH% token pasting if you want your program to be picked up first, ahead of anything and everything else that might be installed on the system by the same name:

Note that it’s important not to include double-quotes while building the new PATH . The command processor never expects double-quotes in the PATH string and may behave in unexpected ways if you add any. It delimits paths by semicolon ( ; ) only.

Also note that this methods depends on the large strings build as explained by Seki in his answer.

nsExec::Exec differs from ExecWait in that it runs internally, without popping up additional visible cmd prompt windows.

How to update system PATH variable permanently from cmd?

We can use setx as discussed here.

But this command can just make changed to user PATH variable not the system one.

How can we make a similar system wide command?

4 Answers 4

Type setx /? to get basic command help. You’ll easily discover:

You need to run this from an elevated command prompt. Right-click the cmd shortcut and select Run as Administrator .

We may destroy the current system’s PATH variable. Make sure you backup its value before you modify it.

One problem with %PATH%, is it includes the user’s path. If you don’t mind Powershell, you can run the following

If you want to add some location to the PATH environment variable on user level, use the following on the command line:

Why the strange syntax? First, you do not want to expand the system PATH variable but keep it as a symbol, otherwise you will not participate in future additions to the system PATH variable. Therefore, you have to quote the % characters with ^.

If you use this in a command script, you have to use double %% instead of ^%.

The » encloses a string that contains spaces. If you do not have spaces, you can omit the quotes.

The added string has to follow directly without space so the whole thing forms a single argument to the setx command.

How to update PATH variable permanently from Windows command line?

If I execute set PATH=%PATH%;C:\\Something\\bin from the command line ( cmd.exe ) and then execute echo %PATH% I see this string added to the PATH. If I close and open the command line, that new string is not in PATH.

How can I update PATH permanently from the command line for all processes in the future, not just for the current process?

I don’t want to do this by going to System Properties → Advanced → Environment variables and update PATH there.

This command must be executed from a Java application (please see my other question).

7 Answers 7

The documentation on how to do this can be found on MSDN. The key extract is this:

To programmatically add or modify system environment variables, add them to the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key, then broadcast a WM_SETTINGCHANGE message with lParam set to the string «Environment». This allows applications, such as the shell, to pick up your updates.

Note that your application will need elevated admin rights in order to be able to modify this key.

You indicate in the comments that you would be happy to modify just the per-user environment. Do this by editing the values in HKEY_CURRENT_USER\Environment. As before, make sure that you broadcast a WM_SETTINGCHANGE message.

You should be able to do this from your Java application easily enough using the JNI registry classes.

Оцените статью