Обновить переменные системной среды для всех процессов без выхода из системы / перезапуска в C++
Я пишу программу на C++, которая добавляет новый каталог в переменную среды path для системы. Каталог успешно добавлен сRegSetValueEx()
функции, но изменения отражаются не для всех процессов.
я пытался BroadcastSystemMessage()
а также SendMessageTimeout()
функционирует отдельно, как показано ниже
LPCTSTR keyPath = TEXT("System\\CurrentControlSet\\Control\\Session Manager\\Environment");
BroadcastSystemMessage(0, 0, WM_SETTINGCHANGE, 0, (LPARAM)keyPath);
а также
LPCTSTR keyPath = TEXT("System\\CurrentControlSet\\Control\\Session Manager\\Environment");
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)keyPath, SMTO_BLOCK, 100, NULL);
но они оба не работают, однако, когда я перезапускаю свою систему, изменения отражаются.
Что я хочу
Я хочу, чтобы изменения отражались для всего процесса без выхода из системы, и возможно, несколько дней назад я установил программное обеспечение (Composer https://getcomposer.org/), которое добавил свой путь к среде и обновил переменные среды для всех процессов, не требуя перезагрузка системы.
Вот несколько полезных ссылок, которые я уже просматривал
1 ответ
Я понял, что делаю не так, я использовал
LPCTSTR keyPath = TEXT("System\\CurrentControlSet\\Control\\Session Manager\\Environment");
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)keyPath, SMTO_BLOCK, 100, NULL);
когда это должно быть
LPCTSTR keyPath = TEXT("Environment");
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)keyPath, SMTO_BLOCK, 100, NULL);
и это обновило переменные среды для других процессов без перезапуска.