哪个JRE可以使用C:\ ProgramData \ Oracle \ Java \ javapath \ java.exe?

时间:2018-03-28 17:02:31

标签: java

我正在试图弄清楚java使用哪个环境变量来查找/检测C:\ProgramData\Oracle\Java\javapath\java.exe使用的JRE。

根据Oracle的设计,我C:\ProgramData\Oracle\Java\javapath\中的唯一文件是

  • java.exe
  • javaw.exe
  • javaws.exe

如果我将JAVA_HOME设置为空或某个随机文件夹,则运行java.exe的应用程序仍然有效。所以我只能假设它没有使用JAVA_HOME值。那么它如何找到JRE文件夹?它是否默认为特定的东西?我也没有设置JRE_HOME var。

5 个答案:

答案 0 :(得分:7)

内部带有文件符号链接的常规目录

如果查看C:\ProgramData\Oracle\Java\javapath\中的文件,您会发现它们实际上是到特定Java二进制文件的符号链接。

2015-11-13  06:11 PM    <SYMLINK>      java.exe [C:\Program Files\Java\jre1.8.0_65\bin\java.exe]
2015-11-13  06:11 PM    <SYMLINK>      javaw.exe [C:\Program Files\Java\jre1.8.0_65\bin\javaw.exe]
2015-11-13  06:11 PM    <SYMLINK>      javaws.exe [C:\Program Files\Java\jre1.8.0_65\bin\javaws.exe]

内部包含常规文件的目录交汇处

实际上,使用最新版本(64位)的Java 8安装在系统路径另一个位置:c:\Program Files (x86)\Common Files\Oracle\Java\javapath上。 这次,javapath本身就是结点:

2018-07-21  05:59 PM    <JUNCTION>     javapath [C:\Program Files (x86)\Common Files\Oracle\Java\javapath_target_172906453]
2018-07-21  05:59 PM    <DIR>          javapath_target_172906453

现在,有趣的是,javapath_target _...文件夹中的java.exe等不是符号链接。这些文件使用以下注册表位置查找JRE和JDK版本:

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment]
"CurrentVersion"="1.8"

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8]
"JavaHome"="C:\\Program Files\\Java\\jre1.8.0_65"

答案 1 :(得分:4)

这会给你一个想法:

java -verbose | more

答案 2 :(得分:2)

这些“新的” JDK 8/64位行为是如此令人困惑,我无法猜测为什么我的应用程序无法启动,因为我有JDK(带有专用JRE)和每个路径变量设置,但仍然没有启动。 一段时间后,我单独安装了JRE8,它开始工作了。首先,regedit-密钥仅由公共JRE编写。...好吧。

然后,我想知道该应用程序使用了哪个运行时,我将所有java * .exe重命名,但仍能正常工作。64位我重命名了全新的regedit密钥。仍然有效...

故事的结尾:在Windows 64中,regedit密钥位于 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft(32位)和

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\JavaSoft(64位)

我的应用正常运行是因为

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\1.8\RuntimeLib\ 

指向崇敬符号链接的jvm.dll。我需要啤酒,我想要另一份工作:-)

这是一个很好的链接,它解释了Regedit-Keys和Java用来执行的不同“发现方法” 找到最新安装的版本:

http://mindprod.com/jgloss/registry.html

仍然是SYSLink-使用JDK8进行的更改似乎是未记录的更改,是在JRE8u171之前引入的。

我的sysLink路径为C:\Program Files (x86)\Common Files\Oracle\Java,实际上是子目录的连接点。 然后,JDK8安装程序会将java * .exe文件复制到Windows \ System32 \ btw中。

更多信息:

对不起,我现在很沮丧。我希望它可以帮助其他人。

答案 3 :(得分:0)

尝试使用findstr的java -verbose

示例:

C:\>java -verbose 2>nul | findstr /I opened
[Opened C:\Program Files\Java\jre1.8.0_201\lib\rt.jar]

尝试使用/ s进行reg查询

示例:

C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /s

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
    CurrentVersion    REG_SZ    1.8
    BrowserJavaVersion    REG_SZ    11.201.2

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8
    RuntimeLib    REG_SZ    C:\Program Files\Java\jre1.8.0_201\bin\server\jvm.dll
    JavaHome    REG_SZ    C:\Program Files\Java\jre1.8.0_201
    MicroVersion    REG_SZ    0

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_201
    JavaHome    REG_SZ    C:\Program Files\Java\jre1.8.0_201
    MicroVersion    REG_SZ    0
    RuntimeLib    REG_SZ    C:\Program Files\Java\jre1.8.0_201\bin\server\jvm.dll

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_201\MSI
    INSTALLDIR    REG_SZ    C:\Program Files\Java\jre1.8.0_201\
    JU    REG_SZ
    OEMUPDATE    REG_SZ
    FROMVERSION    REG_SZ    NA
    FROMVERSIONFULL    REG_SZ
    PRODUCTVERSION    REG_SZ    8.0.2010.9
    EULA    REG_SZ
    JAVAUPDATE    REG_SZ    1
    AUTOUPDATECHECK    REG_SZ    1
    AUTOUPDATEDELAY    REG_SZ
    FullVersion    REG_SZ    1.8.0_201-b09


C:\>

注意:如果您只关心版本号,则可能要尝试使用PowerShell的“ get-command”:

PS C:\> Get-Command java | ft -AutoSize

CommandType Name     Version   Source
----------- ----     -------   ------
Application java.exe 8.0.201.9 C:\Program Files (x86)\Common 
Files\Oracle\Java\javapath\java.exe

答案 4 :(得分:0)

好吧,我想这就是您想要的答案...

环境变量Path在其顶部添加C:\Program Files (x86)\Common Files\Oracle\Java\javapath。因此,您的JAVA_HOME的优先级较低。

the screenshot

以上其他答案可能解释了此路径的工作原理。