如何在Windows上检测已安装的Sun / Oracle JRE?

我试着用谷歌搜索答案,但我发现的只是如何从浏览器中检测Java的技巧或者只是启动Java的非常通用的方法,看它是否运行,这在我的应用程序中引入了可能很长的延迟。 (第一次在我的机器上启动时~~两秒钟)

如果以下限制适用,我希望有更快的方法:

  • 只有Sun / Oracle JRE或JDK
  • 只有1.6或更高
  • 只有Windows平台
  • 不是来自浏览器,而是来自普通的旧Win32可执行文件

此检测不适用于公共应用程序,仅适用于Windows平台上的内部使用。

是否有我可以阅读的注册表路径或我可以解析的一些配置文件?

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment 

Windows>开始> cmd>

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

如果安装了JRE,则会显示Path,例如: C:\Windows\System32\java.exe

注册表可能是最简单的路径 – 假设安装程序已运行。 已安装的版本可以在以下各种子项中找到:

 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment 

如果用户已手动配置其环境,则可以检查JAVA_HOME /遍历PATH变量并检查文件版本。 演示WSH脚本:

 'file: whereJava.vbs 'usage: cscript /Nologo whereJava.vbs 'find Java 6 from registry Set objShell = CreateObject("WScript.Shell") Wscript.Echo objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\" &_ "JavaSoft\Java Runtime Environment\1.6\JavaHome") 'check file version of java.exe javaHome = objShell.Environment.item("JAVA_HOME") Set objFSO = CreateObject("Scripting.FileSystemObject") Wscript.Echo objFSO.GetFileVersion(javaHome & "\bin\java.exe") 

请参阅GetFileVersionInfo和公司。 主要版本号似乎与Java版本匹配(5,6)。 没有调用JVM就可以做到有限的数量。

相反,您可以尝试在命令提示符下运行命令“java -version”。

如果JRE未正确安装但是从其他计算机复​​制,则实际上可能无法正常工作。 一个确定的镜头解决方法是导航到JRE安装目录“ C:\ Program Files \ Java \ ”,从命令提示符导航到bin文件夹,然后运行“ java -version ”。 输出将是安装版本,以及您正在寻找的所有相关信息。

在Windows机器上可以有任意数量的已安装JRE和JDK,但只有一个将设置HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java运行时环境。

您可能还会考虑“JAVA_HOME”和“Path”环境变量,因为它们会影响命令行java调用。