在我的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 Environment
和HKEY_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。
但是有更好的选择吗?
答案 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%