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

时间:2009-08-27 09:24:27

标签: winapi java

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

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

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

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

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

5 个答案:

答案 0 :(得分:19)

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment

答案 1 :(得分:5)

Windows>开始> cmd>

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

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

答案 2 :(得分:4)

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

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的情况下,您可以执行有限的操作。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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