以编程方式,如何检查java是否已安装并从jvm.dll获取路径?
答案 0 :(得分:2)
Java可以安装在任何地方,并且无法保证您应该能够在哪里查看。所以,对你的问题的一般答案是"它是不可能的" ,或"你必须运行递归文件搜索{{1}在你的整个文件系统" 。
但这不是,你想要什么。我想,你想得到一个"默认" java或jvm,将由java工具或任何java软件使用。
通常,您可以在jvm.dll
环境变量(在Windows上,$JAVA_HOME
)找到实际的jdk或jre安装,其中应包含%JAVA_HOME%
。
如果它不起作用,则系统上存在配置问题,但可能会发生。您的第二选择应该是在系统路径的某个位置找到jvm.dll
或java.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的路径是:
Java HotSpot服务器VM的路径为:
Windows注册表项
Oracle,OpenJDK,Azul,IBM和其他JDK开发人员可以使用各种Windows注册表项。例如,Java 11似乎使用了JavaSoft\JDK
键,而Java 8使用了JavaSoft\Java Development Kit
。 Launch4j和Java 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"