C:\ProgramData\Oracle\Java\javapath\Java.exe使用哪个JRE?
我试图找出java使用哪个环境变量来查找/检测C:\ProgramData\Oracle\Java\javapath\Java.exe使用哪个JRE?,java,Java,我试图找出java使用哪个环境变量来查找/检测C:\ProgramData\Oracle\java\javapath\java.exe所使用的JRE 根据Oracle的设计,我在C:\ProgramData\Oracle\Java\javapath\中仅有的文件是 java.exe javaw.exe javaws.exe 如果我将我的JAVA\u HOME设置为空或某个随机文件夹,使用JAVA.exe运行应用程序仍然有效。因此,我只能假设它没有使用JAVA\u HOME值。那么它是如何找到
C:\ProgramData\Oracle\java\javapath\java.exe所使用的JRE
根据Oracle的设计,我在C:\ProgramData\Oracle\Java\javapath\
中仅有的文件是
java.exe
javaw.exe
javaws.exe
如果我将我的
JAVA\u HOME
设置为空或某个随机文件夹,使用JAVA.exe运行应用程序仍然有效。因此,我只能假设它没有使用JAVA\u HOME
值。那么它是如何找到JRE文件夹的呢?它是否默认为特定的内容?我也没有JRE_HOME
var集 这会给你一个想法:
java -verbose | more
包含文件符号链接的常规目录
如果查看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]
现在,有趣的是,javapath\u target\u中的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"
这些“新的”JDK 8/64位行为非常混乱,我猜不出为什么我的应用程序不会启动,因为我有JDK(带有专用JRE)和每个路径变量设置,但仍然没有启动。
过了一段时间,我单独安装了JRE8,它运行正常。首先,regedit-key只由公共JRE编写。。。。嗯
然后我想知道应用程序使用的是哪种运行时,我重命名了所有java*.exe,但它仍然有效64位。我重命名了所有新的regedit键。它仍然有效
故事结束:对于Windows 64,regedit键处于
HKEY\u LOCAL\u MACHINE\SOFTWARE\JavaSoft
(32位)和
HKEY\u LOCAL\u MACHINE\SOFTWARE\WOW6432Node\JavaSoft
(64位)
我的应用程序之所以有效是因为
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\1.8\RuntimeLib\
指向使用符号链接的jvm.dll。我需要一杯啤酒,我想要另一份工作:-)
这里有一个很好的链接,它解释了Regedit键和Java用来创建的不同“发现方法”
查找最新安装的版本:
尽管如此,JDK8的SYSLink-Change似乎是在JRE8u171之前引入的未记录的更改
我的系统链接路径是C:\ProgramFiles(x86)\Common Files\Oracle\Java
,实际上是到子目录的连接。
JDK8安装程序将java*.exe文件复制到Windows\System32\btw中
更多资讯:
- -在Windows 10上,
C:\ProgramData\Oracle\Java\javapath
的意义是什么
-
对不起我的咆哮,我现在很沮丧。我希望它能帮助其他人。使用findstr尝试java-verbose
例如:
C:\>java -verbose 2>nul | findstr /I opened
[Opened C:\Program Files\Java\jre1.8.0_201\lib\rt.jar]
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:\>
使用/s尝试注册查询
例如:
C:\>java -verbose 2>nul | findstr /I opened
[Opened C:\Program Files\Java\jre1.8.0_201\lib\rt.jar]
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:\>
尝试使用java获取命令
注意:如果您只关心版本号,则可能需要尝试PowerShell的Get命令
:
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
你看过PATH环境变量了吗?@OldProgrammer当然。我在这里定义了其他java路径。但是java.exe会使用path env变量来查找它所需的lib吗?我希望它需要JAVA_HOME变量,而不是使用路径变量。通常,我希望该路径用于查找可执行文件。此外,如果我清除PATH var,使其仅定义了C:\ProgramData\Oracle\Java\javapath\defined,Java仍在运行。我相信在PATH变量旁边,system32中的Java.exe使用了regedit查找。这种行为花费了我很多时间…谢谢。它将我指向c:\ProgramFiles(x86)\java文件夹。我仍然不知道它为什么默认在那里,但至少我知道它现在在哪里。实际上WOW6432Node是32位应用程序使用的注册表节点。有趣的是,我尝试通过注册表更改版本,然后获取错误:注册表项'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'的值为'11.0.5',但需要'1.8'。