如何通过编程检查Java是否已安装并从jvm.dll获取路径?
对于Oracle的JDK,Java HotSpot客户端VM在JDK内的路径为:
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
(Java开发工具包路径)HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in\{version}\JavaHome
(Java插件路径)HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\{version}\JavaHome
(Java运行环境路径)HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JDK\{version}\JavaHome
(JDK路径)编辑
# 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"
$JAVA_HOME
环境变量(在Windows上为%JAVA_HOME%
)中找到实际的JDK或JRE安装文件夹,其中应该包含jvm.dll
。$PATH
或在Windows上为%PATH%
)中找到java.exe
或javaw.exe
。java.home
系统变量的值。例如:System.out.println(System.getProperty("java.home"));
然后在这个类上调用java.exe
。如果Java未安装或无法运行,则进程将无法启动...但如果它启动了,它会告诉您JRE安装文件夹的路径,这是您需要找出jvm.dll所在位置的必要信息。
仍然存在Java已安装但不在您的PATH中的问题。在这种情况下,我将只报告找不到Java并要求用户提供额外输入。
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