微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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);

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。