Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发现是否从BAT文件安装了32位或64位Java_Java_Registry_32bit 64bit - Fatal编程技术网

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

发现是否从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

在我的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 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版本,并通过解析结果字符串来查看运行哪个命令行。。。。