2011-03-19 38 views
4

使用代码,如何确定在Windows中安装Java VM(及其版本)。如何确定Java VM是否安装在Windows上?

+1

Java代码可以在没有Java VM的情况下运行? – 2011-03-19 15:17:22

+0

也许OP意味着从批处理文件或其他语言检测?请解释。 – mellamokb 2011-03-19 15:20:22

+0

他没有说代码必须是Java。 – Ken 2011-03-19 15:32:46

回答

6

假设您希望从批处理文件中以编程方式确定此问题,可以使用安装在windows\system32中的reg.exe工具。

关于这个工具令人讨厌的事情是,没有办法让它只返回一个退出代码,所以你必须通过重定向压制它的输出到任何地方。当该值不存在时,它也会生成一条ERROR消息。

@echo off 
rem 
rem DetectJvmInstalled.cmd 
rem 
reg.exe query "HKLM\Software\JavaSoft\Java Runtime Environment" /v "CurrentVersion" > nul 2> nul 
if errorlevel 1 goto NotInstalled 

rem Retrieve installed version number. 
rem The reg.exe output parsing found at http://www.robvanderwoude.com/ntregistry.php 
set JvmVersion= 
for /F "tokens=3* delims= " %%A IN ('reg.exe query "HKLM\Software\JavaSoft\Java Runtime Environment" /v "CurrentVersion"') do set JvmVersion=%%A 
rem if "%JvmVersion%" == "" goto NotInstalled 

:Installed 
echo JVM Version = %JvmVersion% 
exit /b 0 

:NotInstalled 
echo JVM Not installed. 
exit /b 1 

注意事项:

  • 有两种重定向到nul设备,一个用于标准输出,另一个用于标准错误。
  • 检测与值解析分开进行,以避免在值不存在时显示ERROR...消息。
  • delims=选项后面有一个空格字符(因为空格是分隔符)。
  • 批处理文件如果成功(安装)或失败时(未安装)返回错误级别/退出代码为零。

希望它有帮助。

3

无法检测是否从Java代码安装了JVM。如果没有JVM存在,Java代码就无法运行。因此,如果您能够运行已编译的代码,则会安装JVM。

+2

所以我们可以说'return true'总是正确的结果:-) – 2011-03-19 17:29:13

2

我不认为在Windows上可以安装的JVM可以是。我更关心的是检查你的硬盘驱动器目录中是否有JRE,以及是否可以通过参考PATH环境变量中的bin文件夹轻松访问此JRE。

您可以通过尝试从代码运行java -version并收集输出来检查此问题。

如果您收到消息说明'java' is not recognized as an internal or external command, operable program or batch file.,那么您的jre没有被引用。

+1

虽然Microsoft Windows仍然支持PATH变量,但它更喜欢它的注册表将程序文件名解析为其完整路径。所以只要检查PATH变量的条目是不够的。正如你所建议的那样,运行“java -version”似乎是最可靠和最简单的解决方案。 – 2011-03-19 15:44:59

5

我想也许你有兴趣调用这些:

System.getProperty("os.name"); 
System.getProperty("java.version"); 
+2

不知道这是OP在找什么,但这是我正在寻找的。谢谢。 – NeilMonday 2011-09-06 21:14:21

4

Oracle的deployJava.js不能只检查一个Java特定的最低版本可在用户的计算机上,但如果是在Windows上,引导他们通过下载并安装它,如果需要的话。

通常deployJava.js用于使用Java Web Start & applets,您可以使用JWS形式链接到“裸” Jar文件(不依赖)启动的应用程序提供了启动按钮。

相关问题