发现是否从BAT文件安装了32位或64位Java

时间:2011-07-26 13:07:25

标签: java registry 32bit-64bit

在我的BAT文件中,我希望有类似的内容:

set javaVersion=...

if %javaVersion% equ 32 (
  echo "do 32 Java routine"
) else (
  echo "do non-32 Java routine"
)

在安装了JRE 64bit的64位计算机上,在HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime EnvironmentHKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6下的注册表中,我看到与安装了JRE 32位的32位计算机上的值几乎相同:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
    CurrentVersion:       1.6
    Java6FamilyVersion:   1.6.0_26

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6
    JavaHome:             C:\Program Files\Java\jre6
    MicroVersion:         0
    RuntimeLib:           C:\Program Files\Java\jre6\bin\client\jvm.dll

因此,我可以通过检查PROGRAMFILES(X86)是否已定义以及JavaHome是否指向以C:\Program Files\开头的位置来检查它是否为64位Java。

但是有更好的选择吗?

4 个答案:

答案 0 :(得分:3)

实际上,32位服务器不输出“32位”。在我的系统(32位Kubuntu)上,我得到以下java -version输出:

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)

因此,最好只测试64位的缺失,而不是存在。

答案 1 :(得分:2)

您可以捕获java -version的输出 - 它就在那里 这是我的mac上的输出:

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)

您应该在输出中找到“64位”或“32位”。

答案 2 :(得分:1)

如果您只需要知道是否有可用的Java,那么运行一个小类,使用默认的java命令执行某些操作。

如果您需要知道要使用哪些库,那么不要在注册表中查找,而是运行一个小类,它尝试调用库中的本机代码并让bat文件知道它是否运行正常,然后运行一次您支持的每个平台。

如果没有,则报告。如果一个或多个作品然后选择你最喜欢的作品并使用它。

换句话说:明确地测试您需要知道的内容。任何假设最终都会失败。

答案 3 :(得分:1)

最简单的方法是解析java -d64 -version的退出代码。

对于64位JDK,对于32位,它将为0:1。

所以,你可以引入新变量java64bit:

java -d64 -version >NUL 2>NUL
set java64bit=%ERRORLEVEL%