程序修改Windows环境变量生效

转载 2006年06月15日 18:58:00

修改Windows环境变量生效

bruce | 五月 27,2005 12:37
http://blog.9zi.com/post/1/805

不少程序需要添加各自的环境变量,方便定制性使用。用得最多的是用户指定目录如JAVA_HOME等变量,程序中可以根据获取变量%JAVA_HOME%,来获取对应设置的字符串。


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

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

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

整个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. }

Log It,以备后来者检索。

相关文章推荐

VC编程获取和修改环境变量,不重启系统即时生效

方法1:getenv,putenv只影响当前进程的环境块。 // 头文件: #include    // 功能: 把字符串加到当前环境中    // 用法: int putenv(char *e...
  • dj0379
  • dj0379
  • 2012年08月29日 16:28
  • 9424

window修改环境变量后及时生效

详解Windows不重启使环境变量修改生效(经典) 在“我的电脑”->“属性”->“高级”->“环境变量”中增加或修改环境变量后,需重启系统才能使之生效。有没有什么方法可让它即时生效呢?下面介绍...

环境变量生效

REGEDIT4HKEY_LOCAL_MACHINE\Software\文心软件工作室]@="文心工作室""姓名"="徐海斌""年龄"=hex:23"婚否"=dword:00000000一不做二不休,...

HWND_BROADCAST的一个用法——修改环境变量,立即通知系统

在编程时遇到一个问题: 就是程序通过修改注册表,修改了系统的环境变量,但是不会立即生效,除非在【我的电脑】上点击右键,然后打开环境变量的窗口,点击【OK】后,才能生效。后来用Spy++工具捕获消息,发...
  • dbafans
  • dbafans
  • 2009年09月10日 15:11
  • 2515

Lesson19 动态链接库DLL

Windows API中的所有函数都包含在DLL中。其中有三个最重要的DLL,Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;User32.dll,它包含用于执行用户界面任务(如窗...
  • Debugyt
  • Debugyt
  • 2012年02月22日 15:25
  • 246

在Windows下用MinGW+GCC编译SDL的注意事项

长期(大于3年)以来被一个极其郁闷的问题困扰:就是在自己用gcc编译的SDL.dll一直比libsdl.org官方发布的SDL.dll的性能弱。即使用同样的codebase也是如此,最初是怀疑编译器的...
  • psusong
  • psusong
  • 2010年03月09日 15:19
  • 4966

java程序修改环境变量

  • 2010年08月24日 23:45
  • 93KB
  • 下载

c#不重启电脑修改环境变量生效

  • 2013年12月30日 10:51
  • 16KB
  • 下载

详解Windows不重启使环境变量修改生效(经典)

http://hi.baidu.com/xckouy/item/ff135263dfd92a97c4d2496b 在“我的电脑”->“属性”->“高级”->“环境变量”中增加或修改环...

命令行使windows环境变量立即生效

命令行使windows环境变量立即生效用户变量和环境变量对于Windows系统级应用开发有着至关重要的意义。最重要的一项功能便是我们可以通过DOS命令行或运行时指令进行本地过程调用,从而避免诸多路径相...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:程序修改Windows环境变量生效
举报原因:
原因补充:

(最多只允许输入30个字)