刷新所有进程的系统环境变量,无需在 C++ 中注销/重新启动

Refresh System Environment Variables for all processes without Logout/ Restart in C++

我正在用 C++ 编写一个程序,该程序将一个新目录添加到系统的路径环境变量中。已使用 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),它添加了它的环境路径并刷新了所有进程的环境变量无需重新启动系统。

这是一些我已经查看过的有用链接

我发现我做错了什么,我正在使用

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);

这会在不重新启动的情况下刷新其他进程的环境变量。