先来讲讲现象,对于新建系统环境变量存在差异型:
1、开始 ——>Run ——>cmd, 查看环境变量为我们在我的电脑中设置的环境变量
2、启动任务管理器——>先结束cmd.exe进程——>查看重新新建打开一个cmd.exe, 发现此时环境变量中会丢失。
发现上面是在eclipse中用System.getenv("变量名") 取环境变量的时候,发生的。当时那个郁闷,你懂的。
先写在这儿,稍后查明原因继续。
经过几周的纠结之后,发现设置的环境变量经过set之后,是生效的。产生上面差异性的原因在于,没有重新启动任务管理器。这就导致系统取的进程仍然是原来没有修改环境变量的进程,当然得不到最新设置的环境变量值。
切忌:产生不一致的原因多半是没有重启相关程序或者软件,需要特别注意。
原因分析:
解释一下相关名称:
explorer windows资源管理器
autoexec.bat windows每次必用的程序(比如控制键盘的程序,控制鼠标的程序)
winLnit Windows启动应用程序
VxD Windows虚拟设备
软件安装完成之后,与Explorer有关的设置须等待Explorer重启后才能生效;而autoexec.bat中设置环境变量也只能在重新启动计算机时装入;系统DLL只能通过WinInit.exe在进入Windows前的DOS环境下替换,静态VxD只能在装入 Windows的时候载入。
因此,软件在安装完成之后重启计算机才能使软件运行环境生效。
在 WINDOWS操作系统上,一般一个正在运行中的程序,操作系统是不让你修改它的,修改包括替换,改动和删除。那么有时,软件需要向系统目录中写入一个DLL,而系统目录中原来已经有同名的DLL并且这个DLL目前正在被系统使用,因此不能用新版本去替换它,这个时候就需要重启,在重启的过程中,在这个DLL旧的版本被使用之前用新版本替换它。这就是为什么要重启或者注销的原因。
结论:
即当系统使用这个环境变量时候,修改该变量值不会生效,要重启或者注销之后刷新注册表,修改的环境变量才会生效;当环境变量没有被系统使用时候,修改立即生效。
修改环境变量之后,如果受影响的是应用程序,那么只要简单地重新启动此应用程序,环境变量的修改就会反映到该程序中,而不必重新启动计算机;但是,如果受影响的是系统服务,就必须重新启动才能将环境变量的修改反映到系统服务中(因为没有办法在不重启计算机的情况下重新启动系统服务管理器)
解决方案:
方案一:不用重启电脑,使环境变量生效:
A、 我的电脑>属性>高级>环境变量,添加或者修改环境变量;
B、 运行“DOS命令提示符“或者 run > 输入cmd
C、 修改皇家变量值。假设修改PATH变量, 则输入 set path = D: 或者 直接输入set,dos会显示全部环境变量,然后进行D步骤操作
D、 关闭DOS窗口
E、 重新打开DOS窗口,输入echo “PATH” 查看PATH变量,和在我的电脑里修改的环境变量一致,表明修改变量已经生效。
说明:
不用担心在DOS窗口的修改会影响我的电脑>属性>高级>环境变量里的修改,DOS窗口的环境变量只是Windows环境变量的一个副本,副本的改动不会影响正本,但会触发正本的刷新,这正是我想要的——让环境变量生效。对于新建环境变量,比如A,dos 中set 的值为A ,即 set A = 值,这样就让A变量生效。
方案二:重启Window自带的EXPLORER.EXE程序(模拟重启操作)
先按ctrl+Alt+Del组合键调出任务管理器,然后定位到“进程”项,结束调EXPLORER.EXE进程,然后再点工具栏中的“文件”,在下拉菜单中选择“新建任务(运行。。。)”,会跳出一个框,在“打开”右边的框中输入刚才结束调的那个进程“EXPLORER.EXE”,重新启动该×程序。此时,就如同注销或者重启电脑了。
方案三:重启电脑或者注销,重新登录。