如何在只查看文件系统和注册表的情况下检测是否在x64 Windows上安装了32位Java?

27

我需要确定特定系统是否安装了32位Java。我正在进行远程查询,只能访问文件系统和注册表,因此无法尝试运行java.exe或运行任何Java代码。

我还想确保我检测到IBM和Sun Java以及任何其他发行版,这些发行版似乎将文件放在文件系统和注册表的不同位置。

我想到的最好方法是检查C:\Windows\SysWOW64\java.exe。这是一种可靠的测试32位Java存在的方法吗?还是有某些版本不会将java.exe放在该文件夹中?

更新:我仍在寻找更强大的答案。只是要明确一点,我无法访问命令提示符。而且,我想检测Java,无论发布者是谁,安装的版本号是什么,以及用户选择在哪个路径上安装它。

C:\Windows\SysWOW64\java.exe似乎符合这些要求,但我希望从更有经验的人那里得到确认,即每个Java安装程序都会将该可执行文件放在那里。


对于你的问题,我的情况是我正在使用Advanced Installer,并且需要通过检查Windows注册表来确定安装了哪个版本的Java(x86/x64)。 - Marcelo
这里也有:https://dev59.com/D3I95IYBdhLWcg3w_zQN#2062263 - Pacerier
我该如何用64位版本替换我的当前精确版本? - Seymour
6个回答

49

这似乎提供了有关Windows的信息:

1.) 打开Windows命令提示符。

2.) 键入:java -XshowSettings:all 并按 ENTER 键。

3.) 许多信息将在命令窗口上显示。向上滚动,直到找到字符串:sun.arch.data.model

4.) 如果它说 sun.arch.data.model = 32,则您的 VM 是 32 位。如果它说 sun.arch.data.model = 64,则您的 VM 是 64 位。


3
不需要显示所有设置。java -XshowSettings:properties -version就足够了(-version是为了防止“无参数”错误)。请参阅文档中的“非标准选项”部分。 - Franklin Yu
1
我该如何用64位版本替换我的当前精确版本? - Seymour
谢谢,这很有用。很奇怪和尴尬的是,java -version只能输出这个。 - Giorgi Tsiklauri

11

你有访问命令提示符的权限吗?

方法1:命令提示符

可以通过执行以下命令来确定系统上安装的Java版本具体信息 java -version

方法2:文件夹结构

如果您无法访问命令提示符,则需要确定Java所在的文件夹。

32位: C:\Program Files (x86)\Java\jdk1.6.0_30

64位: C:\Program Files\Java\jdk1.6.0_25

但是在安装过程中,用户可能会更改安装文件夹。

方法3:注册表

您还可以在注册表编辑器中查看已安装的版本。

  1. 进入注册表编辑器

  2. 编辑->查找

  3. 搜索Java,您将获取Java的注册表条目。

  4. 在名称为:DisplayName&DisplayVersion的条目中,显示了已安装的Java版本。


HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Uninstall - Kakarot
在Windows操作系统上,检查Sun/Oracle Java的JRE的正确注册表路径在这里:HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\{CurrentVersion}\JavaHome,其中CurrentVersion是存储在HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\中的键值。JRE使用此键值作为其系统属性java.home,而不是JAVA_HOME。但是,除非您对JavaHome键值应用#method3,否则此注册表无法帮助您确定它是32位还是64位。对于JDK,它也是相同的,但位于不同的注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit - ee.
该死。我一直没有安装JRE。谁知道D:\Program Files不是有效的:(好吧,你可以很容易地解决这个问题,但是:谁告诉你JRE安装在默认位置?我认为最简单的解决方案,而不需要注册表等操作,就是使用java_home环境变量。在安装时应该设置它(或者这是jdk安装的一部分?我不知道)。 - Voo
哦,忘了关于可靠地确定文件是32位还是64位的部分。只要它只在Windows上运行,你就可以确定它使用PE格式,因此你可以编写一个简单的Win32 C程序来解析文件头并检查自身。我们对IMAGE_FILE_HEADER部分特别感兴趣,尤其是其中的Machine - Voo
4
对于第二种方法,32位是指x86文件夹吗? - Adam Johns
显示剩余3条评论

5

检查此密钥适用于32位和64位Windows机器。

 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment

这是针对 Windows 64 位操作系统,使用 32 位 JRE 的情况。

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment

这将适用于Oracle-Sun JRE。

1
这是唯一的编程答案,可惜得票最少。 - Michael Chourdakis

3

只需输入"java -d64 -version" 或 "java -d32 -version",如果已安装Java,它将返回当前安装的版本信息。


1
如果不是Oracle的Java,你可能分辨不出来。当我安装Oracle Java 64位版本时,文件会被放置在C:\Program Files\Java目录下,但是当我安装32位版本时,默认会放置在C:\Program Files (x86)\Java目录下。当然,安装Java的人也可以选择覆盖这些默认设置。

0

我在Windows操作系统上尝试了Oracle和IBM Java的32位和64位安装程序,发现C:\ Windows \ SysWOW64 \ java.exe文件的存在是确定32位Java可用的可靠方法。我尚未测试这些安装程序的旧版本,但至少看起来这应该是测试最新版本Java的可靠方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接