从BAT文件中发现安装的是32位还是64位Java

3
在我的BAT文件中,我想要有类似以下的内容:
set javaVersion=...

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

在一台64位机器上,安装了JRE 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。
但是,是否有更好的选择呢?

7
你可以在命令行中执行java -version,然后通过解析结果字符串来确定哪个版本正在运行。 - Randy
4个回答

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位,而不是测试存在64位或32位其中之一。

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位”。

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

对于64位JDK,退出代码为0,对于32位则为1。

因此,您可以引入一个新变量java64bit:

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

1

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

如果您需要知道要使用哪些库,那么不要在注册表中搜索,而是运行一个尝试调用库中本地代码并让批处理文件知道它是否成功的小类,并为每个受支持的平台运行一次。

如果没有一个可用,则报告该情况。如果有一个或多个可用,则选择您最喜欢的并使用它。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接