Есть ли способ установить программный путь среды на С++ в Windows?

Есть ли способ установить глобальную переменную окружения Windows программным способом (С++)?

Насколько я вижу, putenv устанавливает его только для текущего приложения.
Изменение непосредственно в реестре (HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment) также является вариантом, хотя я бы предпочел API-методы, если есть?

Ответы

Ответ 1

MSDN Говорит:

Вызов SetEnvironmentVariable не имеет влияние на системную среду переменные. Чтобы программно добавить или изменять переменные системной среды, добавьте их в HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\сессии Manager\Environment, затем транслировать сообщение WM_SETTINGCHANGE с lParam, установленным на строку "Окружающая среда". Это позволяет приложений, таких как оболочка, забрать свои обновления. Обратите внимание, что значения переменных среды перечисленные в этом ключе, ограничены 1024 символы.

Ответ 2

Как указывалось ранее, чтобы изменить PATH на уровне машины, просто измените эту запись в реестре:

HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Но вы также можете установить PATH на уровне пользователя, изменив эту запись в реестре:

HKEY_CURRENT_USER\Environment\Path

И вы также можете установить PATH на уровне приложения, добавив данные приложения \Path в эту запись реестра:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\

Ответ 3

Нет API - изменение реестра - это способ сделать это. Измененное значение будет использоваться для процессов, начиная с изменения.

Также: Обратите внимание, что работающие приложения должны активно обрабатывать измененные настройки, а многие (большинство?) этого не делают.

Ответ 4

Если вы хотите сделать это через реестр, вы можете посмотреть исходный код эту программу.

Microsoft также предоставляет небольшую утилиту командной строки, называемую setx, с инструментами ресурсов, которые позволят вам сделать это. Кстати, регулярная команда set просто позволяет вам определять локальные переменные среды, которые я думаю.

Ответ 5

Да. Вы правы. Вам также необходимо выполнить эти настройки без выхода из системы.

Отправить сообщение о загрузке borad для всех окон SETTINGCHANGE для параметра (LPARAM) "Среда" с SMTO_ABORTIFHUNG за несколько миллисекунд (5000) с помощью API SendMessageTimeout.

Это то, что предоставляет setX.exe с помощью Resource Kit.