0

我正在用 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),它添加了它的环境路径并刷新了所有进程的环境变量,而不需要系统重启。

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

4

1 回答 1

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

这刷新了其他进程的环境变量而无需重新启动。

于 2020-08-24T07:40:15.960 回答