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

发布于 2024-11-26 18:28:47 字数 892 浏览 0 评论 0原文

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

set javaVersion=...

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

在安装了 JRE 64 位的 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:\ 开头的位置来检查它是否是 64 位 Java程序文件\。

但还有更好的选择吗?

In my BAT file I would like to have something like:

set javaVersion=...

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

On a 64bit machine, with JRE 64bit installed, in the registry under HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment and HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6 I see almost the same values as on a 32bit machine with JRE 32bit installed:

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

Therefore, I could check if it is 64bit Java by checking if PROGRAMFILES(X86) is defined and if JavaHome points to location which starts with C:\Program Files\.

But is there a better option?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

时光病人 2024-12-03 18:28:47

实际上,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 位,而不是存在任何一个。

Actually, the 32-Bit Server does not output "32-Bit". On my system (32-bit Kubuntu), I get the following java -versionoutput:

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)

Therefore, it's a better idea to just test for absence of 64-Bit, instead of presence of either.

临走之时 2024-12-03 18:28:47

您可以捕获 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 位”。

You could capture the output of java -version - it's in there.
Here's the output on my 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)

You should find either "64-Bit" or "32-Bit" in the output.

情丝乱 2024-12-03 18:28:47

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

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

如果没有效果,请报告。如果一项或多项有效,请选择您最喜欢的一项并使用它。

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

If you just need to know if there is Java available then run a small class doing something with the default java command.

If you need to know which libraries to use, then instead of poking around the registry then run a small class which tries to call native code in your libraries and let the bat file know if it went well, and run it once for each of your supported platforms.

If none works, then report that. If one or more works then choose the one you like best and use that.

In other words: Explicitly test for what you need to know. Any assumptions will eventually fail.

记忆里有你的影子 2024-12-03 18:28:47

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

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

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

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

The simplest way to do this is to parse the exit code of java -d64 -version.

For 64-bit JDK, it would be 0, for 32-bit: 1.

So, you may introduce new variable java64bit:

java -d64 -version >NUL 2>NUL
set java64bit=%ERRORLEVEL%
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文