orionsnow 发表于 2011-10-21 15:06

zt 修改Windows环境变量后不重新启动使之立即生效的方法

试验了一下发现比重启动还是要节省时间一点点。


修改Windows环境变量后不重新启动使之立即生效的方法
分类: windows 2010-07-02 10:31 746人阅读 评论(0) 收藏 举报

很多安装程序在安装完成后并不要求重启Windows,而新的环境变量已经生效了,可见在不重启Windows的情况下让环境变量生效是完全可行的。

可我搜索如何不需重启Windows让环境变量生效的方法,只找到三类方案:

    下载一个专门的软件
    编个小程序
    修改注册表

我既然是个懒得重启Windows的人,难道我会不厌其烦按上述三种方法去做吗?没办法,我只有自己摸索。最后找到一个非常简单的在Windows下直接让环境变量生效的办法:

先到我的电脑>属性>高级>环境变量,添加新环境变量或修改已有的环境变量,然后运行“DOS命令提示符”或run cmd,假设要修改PATH变量,不管PATH的原值是什么,在DOS窗口直接把PATH修改为任意值,关闭DOS窗口,这时,我的电脑>属性>高级>环境变量里PATH已经在Windows全局生效了。

不用担心在DOS窗口的修改会影响我的电脑>属性>高级>环境变量里的修改,DOS窗口的环境变量只是Windows环境变量的一个副本,副本的改动不会影响正本,但会触发正本的刷新,这正是我想要的——让环境变量生效。

附注:

    不懂在DOS下修改环境变量?简单得很,如要修改PATH,“SET PATH=C:/”,等号两边不要有空格。PATH环境变量最常用,专门有个DOS命令PATH,用来查看和修改PATH值,这里就不展开讲PATH的语法了。

    想验证一下环境变量到底有没有生效?简单得很,新开一个DOS窗口,如要看PATH值,“ECHO %PATH%”。同上,PATH还可以用PATH命令来查看。

    http://blog.goods-pro.com/146/%E8%AE%A9%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E7%94%9F%E6%95%88%E4%B8%8D%E9%9C%80%E9%87%8D%E5%90%AFwindows/

    一般做法是安装的时候就指定,或者程序中设定。

    用批处理临时设置环境变量就不提了,这里讲让环境变量始终生效。

    一般做法是修改环境变量注册表。

    整个Windows都有效的环境变量在
    HKEY_LOCAL_MACHINESYSTEMControlSet001ControlSession ManagerEnvironment
    中设置

    对当前用户有效的环境变量在
    HKEY_CURRENT_USEREnvironment
    中设置

    其实只是简单的元数据

    但往往修改玩后无法即时生效,往往需要重启系统。

    要解决即时生效的问题,可以再在我的电脑属性中设置环境变量中确定一下即可。

    依此看来,这个过程肯定是读取了注册表,再调用一个系统函数来更新整个系统的变量。一定可以编程解决的。

    可惜网海茫茫,收不到。

    一不做二不休,直接下载打开innosetup的代码,搜索Environment,果真找到了。

    很简单:

    SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,LPARAM("Environment"), SMTO_ABORTIFHUNG, 5000, &MsgResult);

    发一个全局的广播,等待各自相应后,立即生效。

    { Note: We originally used SendNotifyMessage to broadcast the message but it
      turned out that while it worked fine on NT 4 and 2000 it didn't work on XP
      -- the string "Environment" in lParam would be garbled on the receiving
      end (why I'm not exactly sure). We now use SendMessageTimeout as directed
      in the KB article 104011. It isn't as elegant since it could cause us to
      be delayed if another app is hung, but it'll have to do. }

    http://hi.baidu.com/hxzon/blog/item/6c2ccf1758d1a90dc83d6dfa.html

页: [1]
查看完整版本: zt 修改Windows环境变量后不重新启动使之立即生效的方法