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

问题描述

我正在用C ++编写一个程序,该程序将新目录添加到系统的路径环境变量中。已使用RegSetValueEx()函数成功添加了目录,但是更改并未反映在所有进程中。

我分别尝试了BroadcastSystemMessage()SendMessageTimeout()函数,如下所示

LPCTSTR keyPath = TEXT("System\\CurrentControlSet\\Control\\Session Manager\\Environment");
        
BroadcastSystemMessage(0,WM_SETTINGCHANGE,(LPARAM)keyPath); 

LPCTSTR keyPath = TEXT("System\\CurrentControlSet\\Control\\Session Manager\\Environment");

SendMessageTimeout(HWND_BROADCAST,(LPARAM)keyPath,SMTO_BLOCK,100,NULL); 

但是它们都不起作用,但是当我重新启动系统时,更改会反映出来。

我想要的

我希望所有更改均能反映出来而无需注销,并且几天前我可能安装了软件(Composer https://getcomposer.org),该软件添加了其环境路径并刷新了所有进程的环境变量,而无需重新启动系统。

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

解决方法

我弄清楚我在做什么,我在用

LPCTSTR keyPath = TEXT("System\\CurrentControlSet\\Control\\Session Manager\\Environment");
SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,(LPARAM)keyPath,SMTO_BLOCK,100,NULL); 

应该在什么时候

LPCTSTR keyPath = TEXT("Environment");
SendMessageTimeout(HWND_BROADCAST,NULL);

,这无需重新启动即可刷新其他进程的环境变量。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...