检查是否已安装jdk / JRE并获取jvm.dll的路径

时间:2014-10-07 16:23:30

标签: java c++ jvm

以编程方式,如何检查java是否已安装并从jvm.dll获取路径?

4 个答案:

答案 0 :(得分:2)

Java可以安装在任何地方,并且无法保证您应该能够在哪里查看。所以,对你的问题的一般答案是"它是不可能的" ,或"你必须运行递归文件搜索{{1}在你的整个文件系统"

但这不是,你想要什么。我想,你想得到一个"默认" java或jvm,将由java工具或任何java软件使用。

通常,您可以在jvm.dll环境变量(在Windows上,$JAVA_HOME)找到实际的jdk或jre安装,其中应包含%JAVA_HOME%

如果它不起作用,则系统上存在配置问题,但可能会发生。您的第二选择应该是在系统路径的某个位置找到jvm.dlljava.exe(Windows上为javaw.exe$PATH)。

有很多工具或java软件都有自己的java / jvm实例,特别是oracle喜欢给出它们。在他们的情况下,只有一般解决方案有效。

答案 1 :(得分:2)

这是我如何做到的片段,jvm dll的位置将存储在runtimeLib

char version[255];
char runtimeLib[255];
DWORD BufferSize = 8192;
string javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment";
if(RegGetValue(HKEY_LOCAL_MACHINE, javaKey.c_str(), "CurrentVersion", RRF_RT_ANY, NULL, (PVOID)&version, &BufferSize) != ERROR_SUCCESS)
    //jre not found

javaKey += "\\";
javaKey += version;
BufferSize = 8192;

if(RegGetValue(HKEY_LOCAL_MACHINE, javaKey.c_str(), "RuntimeLib", RRF_RT_ANY, NULL, (PVOID)&runtimeLib, &BufferSize) != ERROR_SUCCESS)
    //jvm.dll not found

答案 2 :(得分:1)

您还可以编写一个打印出java.home系统变量值的Java程序。例如:

System.out.println(System.getProperty("java.home"));

然后在这个类上调用java.exe。如果没有安装Java或者你无法运行它,那么进程将无法启动...但如果它启动,那么它将告诉你JRE安装文件夹的路径,这是你需要的,以便找出jvm.dll是。

仍然存在安装Java但不在PATH上的问题。在这种情况下,我只会报告找不到Java,并要求用户提供额外的输入。

答案 3 :(得分:0)

Location of VM Library Files (jvm.dll)

对于Oracle的JDK。 JDK中到Java HotSpot客户端VM的路径是:

  • jre / bin / client / jvm.dll(在x86上)

Java HotSpot服务器VM的路径为:

  • jre / bin / server / jvm.dll(在x86上)
  • jre / bin / server / jvm.dll(在IA64上)

Windows注册表项

Oracle,OpenJDK,Azul,IBM和其他JDK开发人员可以使用各种Windows注册表项。例如,Java 11似乎使用了JavaSoft\JDK键,而Java 8使用了JavaSoft\Java Development KitLaunch4jJava Service Launcher之类的程序会在注册表中搜索JVM。

  • HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\{version}\JavaHome
  • HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in\{version}\JavaHome
  • HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\{version}\JavaHome
  • HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK\{version}\JavaHome

编辑

# Recursively search JAVA_HOME for jvm.dll to set JVM_FILE
FOR /R %JAVA_HOME% %f IN (*) DO IF "%~nxf"=="jvm.dll" SET JVM_FILE="%~dpnxf"