修改环境变量刷新到所有进程
2017-07-06 本文已影响107人
laravel
每次修改系统环境变量以后需要重启explorer.exe
进程,使之生效,但是在安装python的时候,发现,并没有重启explorer.exe
但是新打开cmd
竟然可以有python
命令了,在好奇心的驱使下,百度了一下,发现,windows
有一个特殊的消息WM_SETTINGCHANGE
,进程在收到该消息时,应该更新自身的环境变量,而且explorer.exe
进程,很听话的监听处理了这一消息,所以我们只需要在修改完环境变量以后广播这一消息,大部分的系统进程,就都可以更新到最新的环境变量副本了(即少数变态进程,如:cm.exe
进程除外)。
为了发送这一消息,C语言的demo程序如下:
#include "windows.h"
#include "stdio.h"
#pragma comment(lib,"user32.lib")
int main(int argc, char const *argv[])
{
long dwReturnValue=0;
SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)"Environment",SMTO_ABORTIFHUNG,5000,&dwReturnValue);
puts("Environment Variables updated");
return 0;
}