windows如何解决Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'
问题再现与解读
- 首次,使用 java 命令+任意参数 都会报这个错误,最典型的就是
java -version
- 解读一下这个报错信息,注册表路径
Software\JavaSoft\Java Runtime Environment\CurrentVersion
当前值是 1.8,但是 java 命令版本是 1.7
问题解决
方式一:删除C:\Windows\System32
下的java.exe, javaw.exe, javaws.exe
方式二:修改环境变量顺序
这是我原本的 Path
环境变量配置:
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;%JAVA_HOME%\bin;
修改后把%JAVA_HOME%\bin
提前到%SystemRoot%\system32;
之前
%JAVA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
问题分析过程
环境变量
Windows 中的 DOS 操作系统中的 Path
环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到 Path
中指定的路径去找。
java 命令,其实是由系统根据 Path
环境变量路径寻找 java.exe
程序来运行。
CMD - where 命令
描述:显示符合搜索模式的文件位置。在默认情况下,搜索是在当前目录和 PATH
环境变量指定的路径中执行的。
我们可以运行 where java
来查看
我的 java 1.8 安装在 D:\lib\jdk1.8\
, 但是 %SystemRoot%\system32
(即对应C:\Windows\System32
) 优先于 %JAVA_HOME%\bin
(即对应 D:\lib\jdk1.8\bin
)匹配,所以找到了 C:\Windows\System32\java.exe
, 但是这是java 1.7的运行程序。
运行 regedit 打开注册表
点击 开始 --> 运行... --> 输入 regedit
, 回车 --> 打开注册表
找到 HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment\
, 就可以查看注册表属性了,我的 CurrentVersion
是 1.8
总结
- 使用
regedit
查看注册表中的 CurrentVersion - 使用
where java
查看路径 - 让注册表中的
CurrentVersion
和 where 命令找到的第一个java.exe
的版本保持一致!