如何解决在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),该软件添加了其环境路径并刷新了所有进程的环境变量,而无需重新启动系统。
以下是我已经查看过的一些有用链接
- Set current user environment variable from c++ code visible to other process like cmds
- Is there a command to refresh environment variables from the command prompt in Windows?
解决方法
我弄清楚我在做什么,我在用
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 举报,一经查实,本站将立刻删除。