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

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

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

MSDN говорит :

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

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

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

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

 HKEY_CURRENT_USER\Environment\Path 

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

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

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

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

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

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

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

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

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