Windows中JRE安装目录

30

在Windows下是否有任何命令可以检查当前正在使用的JRE(由于计算机上可能安装了多个JRE)的安装目录?对于Linux,相应的命令是

which java

有没有Windows的等效物?


请参见:https://dev59.com/6HVC5IYBdhLWcg3wZwTj - Mark Rotteveel
我正在安装ZAP,它要求指定JRE的位置。所以我从https://adoptium.net/安装了它,并在CMD中使用了以下命令:`for %i in (java.exe) do @echo. %~$PATH:i`,然后从安装窗口中找到了它的位置。 - undefined
5个回答

34

where java 可以列出所有的 Java 可执行文件,但是 java -verbose 可以告诉你使用了哪个 rt.jar,从而确定了使用了哪个 JRE(完整路径):

[Opened C:\Program Files\Java\jre6\lib\rt.jar]
...

编辑:Win7和Java:

java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode)

在Windows下Java无法运行,正如你所提到的,使用java -verbose就解决了问题。谢谢。 - Ankur
当我执行 java -verbose 命令时,我没有看到路径。你是在哪个版本的Java和Windows上尝试这个命令? - Nivas
3
@RC:我想Java只能在Win7 / Win2008上运行。 - Michael Mao
2
在使用Win7操作系统时,where和verbose命令可正常工作。 - user180100
太棒了!我不知道Win8上存在这个命令,但显然它确实存在。谢谢! - djangofan

23

虽然不是命令,但是可以在注册表中找到这些信息:

  • 打开键 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
  • 读取 CurrentVersion 的 REG_SZ 值
  • 打开名为 CurrentVersion 值的子键,其父键为 Java Runtime Environment
  • 读取 JavaHome 的 REG_SZ 值以获取路径

例如,在我的工作站上,我有:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
  CurrentVersion = "1.6"
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.5
  JavaHome = "C:\Program Files\Java\jre1.5.0_20"
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6
  JavaHome = "C:\Program Files\Java\jre6"

所以我的当前 JRE 位于 C:\Program Files\Java\jre6


1
这并不一定正确,因为当前路径可能会定位到另一个Java可执行文件。这只是表示使用Oracle安装程序安装的版本。 - Mark Rotteveel

8

继续我之前的评论,这里有一个批处理文件,根据注册表值显示当前JRE或JDK。

这与其他解决方案不同之处在于,即使Java未在 PATH 上安装,该文件仍能正常工作。

@ECHO off

SET KIT=JavaSoft\Java Runtime Environment
call:ReadRegValue VER "HKLM\Software\%KIT%" "CurrentVersion"
IF "%VER%" NEQ "" GOTO FoundJRE

SET KIT=Wow6432Node\JavaSoft\Java Runtime Environment
call:ReadRegValue VER "HKLM\Software\%KIT%" "CurrentVersion"
IF "%VER%" NEQ "" GOTO FoundJRE

SET KIT=JavaSoft\Java Development Kit
call:ReadRegValue VER "HKLM\Software\%KIT%" "CurrentVersion"
IF "%VER%" NEQ "" GOTO FoundJRE

SET KIT=Wow6432Node\JavaSoft\Java Development Kit
call:ReadRegValue VER "HKLM\Software\%KIT%" "CurrentVersion"
IF "%VER%" NEQ "" GOTO FoundJRE

ECHO Failed to find Java
GOTO :EOF

:FoundJRE
call:ReadRegValue JAVAPATH "HKLM\Software\%KIT%\%VER%" "JavaHome"
ECHO %JAVAPATH%
GOTO :EOF

:ReadRegValue
SET key=%2%
SET name=%3%
SET "%~1="
SET reg=reg
IF DEFINED ProgramFiles(x86) (
  IF EXIST %WINDIR%\sysnative\reg.exe SET reg=%WINDIR%\sysnative\reg.exe
)
FOR /F "usebackq tokens=3* skip=1" %%A IN (`%reg% QUERY %key% /v %name% 2^>NUL`) DO SET "%~1=%%A %%B"
GOTO :EOF

5

请查看我之前问题的回答,这里

c:\> for %i in (java.exe) do @echo.   %~$PATH:i
C:\WINDOWS\system32\java.exe

-1
在命令行中,您可以输入java -version

2
-1 不提供任何路径信息。 - user180100
1
如果Java已安装并设置了环境变量,您需要路径吗? - Ram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接