发现 Java 是从 BAT 文件安装的 32 位还是 64 位
在我的 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 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:\ 开头的位置来检查它是否是 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
实际上,32位服务器不输出“32位”。在我的系统(32 位 Kubuntu)上,我得到以下
java -version
输出:因此,最好只测试是否不存在 64 位,而不是存在任何一个。
Actually, the 32-Bit Server does not output "32-Bit". On my system (32-bit Kubuntu), I get the following
java -version
output:Therefore, it's a better idea to just test for absence of 64-Bit, instead of presence of either.
您可以捕获
java -version
的输出 - 它就在那里。这是我的 Mac 上的输出:
您应该在输出中找到“64 位”或“32 位”。
You could capture the output of
java -version
- it's in there.Here's the output on my mac:
You should find either "64-Bit" or "32-Bit" in the output.
如果您只需要知道是否有可用的 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.
最简单的方法是解析 java -d64 -version 的退出代码。
对于 64 位 JDK,它将是 0,对于 32 位:1。
因此,您可以引入新变量 java64bit:
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: