目录结构:
------ JDK_Environment 文件夹
------ readme.txt 文本文档文件
------ JDK_Environment.bat 批处理文件
------ Step 文件夹
------ JDK_Env_Step1.bat 批处理文件
------ JDK_Env_Step2.bat 批处理文件
文件:
文件1:readme.txt
位置:JDK_Environment 文件夹
内容:
==========使用wmic命令对JDK的环境变量进行配置,可即时生效,不用重启系统。==========
文件清单:
1. JDK_Environment.bat
文件类型:Windows批处理文件
文件说明:可直接执行该批处理,一步完成JDK环境变量的设置。
注:可直接使用JDK_Environment.bat,一步完成JDK环境变量的设置,
若使用Step文件夹中的批处理,则需按说明分步完成。
2. Step
文件类型:文件夹
文件说明:分步执行其中两份批处理文件,完成JDK环境变量的设置。
2.1 JDK_Env_Step1.bat
文件类型:Windows批处理文件
文件说明:首先执行,完成JDK环境变量设置的第一步,JAVA_HOME的设置。
2.2 JDK_Env_Step2.bat
文件类型:Windows批处理文件
文件说明:其次执行,继续完成JDK环境变量设置的第二步,path与CLASSPATH的设置。
注意:
1. 若在path与CLASSPATH变量值的设置时,使用了JAVA_HOME的引用%JAVA_HOME%,则需在不同的“命令提示符”窗口中,分别进行JAVA_HOME与他们俩的设置工作。(Step中的设置方式即为此种情况)
即:
打开“命令提示符”窗口A,在A中进行了JAVA_HOME的设置。
则,下一步path与CLASSPATH的设置,需要重新打开一新的“命令提示符”窗口B,在B中进行他们俩的设置。
原因:
A中窗口虽成功进行了JAVA_HOME的设置,但新设置的变量对当前A窗口并不生效,若继续在其中使用JAVA_HOME的引用%JAVA_HOME%,对path与CLASSPATH进行设置,则会发生找不到%JAVA_HOME%的错误。
解决方案:
1.1 JAVA_HOME与其它需要引用到它的变量,分别在不同窗口,严格按先后顺序进行设置。(见Step文件夹)
1.2 在path与CLASSPATH中不对%JAVA_HOME%进行引用,直接使用绝对路径。(见JDK_Environment.bat)
2.wmic中对原系统变量值的引用问题
例如:
对系统原Path变量的值进行了引用
::更新变量path,加入新值C:\Program Files\Java\jdk1.5.0_07\bin
wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%C:\Program Files\Java\jdk1.5.0_07\bin"
若用上面的顺序进行%path%的引用,即%path%C:\Program Files\Java\jdk1.5.0_07\bin,%path%在增量之前,
增量C:\Program Files\Java\jdk1.5.0_07\bin之前需要要加分号,否则系统不会自动为其加上。
运行后效果如下:
若下面的顺序的进行%path%的引用,即%JAVA_HOME%\bin%path%
::更新变量path,加入新值%JAVA_HOME%\bin
wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%JAVA_HOME%\bin%path%"
%path%在增量之后,增量%JAVA_HOME%\bin的后面要加一个分号,否则系统不会自动为其加上。
运行后效果如下:
C:\Program Files\Java\jdk1.5.0_07\binC:\WINDOWS\system32C:\WINDOWSC:\WINDOWS\System32\Wbem
总结:无论增量与原变量引用之间先后顺序如何,他们之间都要添加分号进行分隔。
author:lioncode
date:2010/11/23 17:54
version:0.0.1
文件2:JDK_Environment.bat
位置:JDK_Environment 文件夹
内容:
::创建变量JAVA_HOME,值为C:\Program Files\Java\jdk1.5.0_07
wmic ENVIRONMENT create name="JAVA_HOME",username="<system>",VariableValue="C:\Program Files\Java\jdk1.5.0_07"
::更新变量path,加入新值C:\Program Files\Java\jdk1.5.0_07\bin
wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%C:\Program Files\Java\jdk1.5.0_07\bin"
::创建变量CLASSPATH,VariableValue等号后为其值。
wmic ENVIRONMENT create name="CLASSPATH",username="<system>",VariableValue=".C:\Program Files\Java\jdk1.5.0_07\lib\dt.jarC:\Program Files\Java\jdk1.5.0_07\lib\tools.jarC:\Program Files\Java\jre1.5.0_07\lib\rt.jar"
文件3:JDK_Env_Step1.bat
位置:JDK_Environment /Step 文件夹
内容:
::创建变量JAVA_HOME,值为C:\Program Files\Java\jdk1.5.0_07
wmic ENVIRONMENT create name="JAVA_HOME",username="<system>",VariableValue="C:\Program Files\Java\jdk1.5.0_07"
文件4:JDK_Env_Step2.bat
位置:JDK_Environment /Step 文件夹
内容:
::更新变量path,加入新值%JAVA_HOME%\bin
wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%JAVA_HOME%\bin%path%"
::创建变量CLASSPATH,VariableValue等号后为其值。
wmic ENVIRONMENT create name="CLASSPATH",username="<system>",VariableValue=".%JAVA_HOME%\lib\dt.jar%JAVA_HOME%\lib\tools.jarC:\Program Files\Java\jre1.5.0_07\lib\rt.jar"
==========================================================================================
下面是网阅的其他朋友解决此问题主要的几种方案,在此也给出大家作为参考。
理论阐述性技术贴:
详解Windows不重启使环境变量修改生效(经典)
在“我的电脑”->“属性”->“高级”->“环境变量”中增加或修改环境变量后,需重启系统才能使之生效。有没有什么方法可让它即时生效呢?下面介绍一种方法:
以修改环境变量“PATH”为例,修改完成后,进入DOS命令提示符,输入:set PATH=C: ,关闭DOS窗口。再次打开DOS窗口,输入:echo %PATH% ,可以发现“我的电脑”->“属性”->“高级”->“环境变量”中设置的 PATH 值已经生效。
不用担心DOS窗口中的修改会影响环境变量的值,DOS窗口中的环境变量只是Windows环境变量的一个副本而已。但是对副本的修改却会引发Windows环境变量的刷新,这正是我们想要的!
诡异啊,使用win+R->cmd 启动的cmd.exe 会发现在电脑属性中设置的环境变量立马生效了,在其他模式下启动的cmd却没有发生效果,怪哉!!查看了一下资料,在电脑属性中设置环境变量以后,以后启动的程序和线程会生效,而对以前驻留内存的程序不起作用,也有人说kill explorer.exe 再启动explorer.exe 可以激发设置其作用。
这里要理解的是,一个程序启动时,环境变量被复制到该程序所在的环境中,在该程序执行过程中不会被除该程序以外的其他程序所改变。也就是说,假设我们启动了一个cmd程序,然后通过控制面板修改了环境变量设置,但是已经启动了的cmd所拥有的环境变量并不会被改变。如果我们在修改环境变量之后启动cmd程序,则该程序将拥有新的环境变量。
那么结论就很明显了:修改环境变量之后,如果受影响的是应用程序,那么只要简单地重新启动此应用程序,环境变量的修改就会反映到该程序中,而不必重新启动计算机;但是,如果受影响的是系统服务,就必须重新启动才能将环境变量的修改反映到系统服务中(因为没有办法在不重启计算机的情况下重新启动系统服务管理器)。
方案一:修改注册表,并向系统广播消息
修改Windows环境变量后不重新启动使之立即生效的方法
不少程序需要添加各自的环境变量,方便定制性使用。用得最多的是用户指定目录如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)
发一个全局的广播,等待各自相应后,立即生效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)