Есть ли способ установить программный путь среды на С++ в 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.