发现是否从BAT文件安装了32位或64位Java
在我的BAT文件中,我希望有如下内容:发现是否从BAT文件安装了32位或64位Java,java,registry,32bit-64bit,Java,Registry,32bit 64bit,在我的BAT文件中,我希望有如下内容: set javaVersion=... if %javaVersion% equ 32 ( echo "do 32 Java routine" ) else ( echo "do non-32 Java routine" ) 在安装了JRE 64位的64位机器上,在注册表的HKEY\U LOCAL\U machine\SOFTWARE\JavaSoft\Java Runtime Environment和HKEY\U LOCAL\U machin
set javaVersion=...
if %javaVersion% equ 32 (
echo "do 32 Java routine"
) else (
echo "do non-32 Java routine"
)
在安装了JRE 64位的64位机器上,在注册表的HKEY\U LOCAL\U machine\SOFTWARE\JavaSoft\Java Runtime Environment
和HKEY\U LOCAL\U 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:\PROGRAMFILES\
开头的位置来检查它是否是64位Java
但是有更好的选择吗?您可以捕获
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位”。实际上,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位,而不是其中任何一位。如果您只需要知道是否有可用的Java,那么使用默认Java命令运行一个小类 如果您需要知道要使用哪些库,那么不要在注册表中乱翻,而是运行一个小类,该类尝试调用库中的本机代码,并让bat文件知道它是否运行良好,然后为每个受支持的平台运行一次 如果没有一个有效,那么报告它。如果一个或多个工作,然后选择一个你最喜欢的,并使用它
换句话说:明确地测试你需要知道的东西。任何假设最终都会失败。最简单的方法是解析
java-d64-version
的退出代码
对于64位JDK,它将是0;对于32位JDK,它将是1
因此,您可以引入新变量java64bit:
java -d64 -version >NUL 2>NUL
set java64bit=%ERRORLEVEL%
您可以执行一个命令行java版本,并通过解析结果字符串来查看运行哪个命令行。。。。