程序修改Windows环境变量生效

修改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,以备后来者检索。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Windows中,当修改环境变量后,其生效的情况取决于所受影响的程序或系统服务。如果受影响的是应用程序,只需要简单地重新启动该应用程序,环境变量的修改就会反映到该程序中,而不必重新启动计算机。这是因为在程序启动时,环境变量会被复制到该程序所在的环境中,并在程序执行过程中不会被其他程序所改变。\[1\] 然而,如果受影响的是系统服务,就必须重新启动计算机才能将环境变量的修改反映到系统服务中。这是因为系统服务在驻留内存时,无法通过简单的重新启动来更新环境变量,需要重启计算机才能重新启动系统服务管理器。\[1\] 总结来说,如果你修改了环境变量并希望其生效,只需要重新启动受影响的应用程序即可。但如果受影响的是系统服务,需要重新启动计算机才能使环境变量的修改生效。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *3* [Windows环境变量生效问题](https://blog.csdn.net/wuguinianjing/article/details/115799104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [windows10 环境变量立即生效的坑](https://blog.csdn.net/m0_51527921/article/details/124816067)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值