如何检测 x64 Windows 上是不是安装了 32 位 Java,仅查看文件系统和注册表?

Posted

技术标签:

【中文标题】如何检测 x64 Windows 上是不是安装了 32 位 Java,仅查看文件系统和注册表?【英文标题】:How do I detect whether 32-bit Java is installed on x64 Windows, only looking at the filesystem and registry?如何检测 x64 Windows 上是否安装了 32 位 Java,仅查看文件系统和注册表? 【发布时间】:2012-02-08 03:52:32 【问题描述】:

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

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

我想出的最好办法是检查 C:\Windows\SysWOW64\java.exe。这是测试 32 位 Java 是否存在的可靠方法,还是某些版本不会将 java.exe 放入该文件夹?

更新:我仍在寻找更可靠的答案。为了清楚起见,我无权访问命令提示符。此外,我想检测 Java,无论发布者是谁,安装的版本号是什么,无论用户选择安装它的路径是什么。

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

【问题讨论】:

+1 回答您的问题。就我而言,我正在使用 Advanced Installer,我需要通过检查 Windows 注册表来知道安装了哪个版本的 Java (x86/x64)... 这里也是:***.com/a/2062263/632951 我怎样才能用 64 位版本替换我的当前版本? 【参考方案1】:

只需写“java -d64 -version”或d32,如果你安装了它,它将给出安装当前版本的响应

【讨论】:

【参考方案2】:

这似乎提供了 Windows 上的信息:

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

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

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

4.) 如果显示 sun.arch.data.model = 32,则您的虚拟机是 32 位的。如果它显示 sun.arch.data.model = 64,则您的虚拟机是 64 位的。

【讨论】:

无需显示所有设置。 java -XshowSettings:properties -version 就足够了(-version 是为了防止“无参数”错误)。请参阅文档中的Non-Standard Options section。 我怎样才能用 64 位版本替换我的当前版本? 谢谢,这很有用。很奇怪也很尴尬,java -version 只是没有给出这个。【参考方案3】:

您可以访问命令提示符吗?

方法一:命令提示符

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

方法二:文件夹结构

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

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

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

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

方法 3:注册表

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

    进入注册表编辑器

    编辑 -> 查找

    搜索 Java。您将获得 Java 的注册表项。

    在名称为DisplayName & DisplayVersion的条目中,显示安装的java版本

【讨论】:

我无权访问命令提示符。我还担心这些路径中包含版本号,并且用户可以在安装时更改该路径。 我似乎找不到您所指的注册表项。它们在注册表中的什么位置? HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Uninstall 看起来我可以检查 HKEY_LOCAL_MACHINE/Software/Wow6432Node/Microsoft/Windows/CurrentVersion/Uninstall 并在其中查找名称为 Java 的内容,但这个解决方案似乎不是很健壮。如果其他名称中包含 Java 怎么办?或者,我可以检查不同版本的 java 的特定名称,但这似乎也很容易出错,以防它发生变化或有新的 Java 发布者。不幸的是,所有这些方法似乎都容易出错。我认为我需要的是每个 Java 安装都会设置的通用文件或注册表项。 对于方法2,32位不是x86文件夹吗?【参考方案4】:

在 32 位和 64 位 Windows 机器上检查此键。

 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment

这适用于带有 32 位 JRE 的 Windows 64 位。

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment

这适用于 oracle-sun JRE。

【讨论】:

这是唯一的编程答案,唉,投票最少。【参考方案5】:

我在 Windows 上尝试了 Oracle 和 IBM Java 的 32 位和 64 位安装程序,并且 C:\Windows\SysWOW64\java.exe 的存在似乎是确定 32 位的可靠方法Java 可用。我没有测试过这些安装程序的旧版本,但对于最新版本的 Java,这至少看起来应该是一种可靠的测试方式。

【讨论】:

【参考方案6】:

如果不是 Oracle 的 Java,你可能无法分辨。当我安装 Oracle Java 64 位时,文件进入 C:\Program Files\Java,但当我安装 32 位版本时,它们默认为 C:\Program Files (x86)\Java。当然,安装 Java 的人可以覆盖这些默认值。

【讨论】:

以上是关于如何检测 x64 Windows 上是不是安装了 32 位 Java,仅查看文件系统和注册表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Windows 10上安装Python

如何在 Win x64 上使用 WinAPI 正确安装虚拟打印机?

在通用应用程序(Windows)中检测 CPU 是不是为 64 位

在 Windows x64 和 NSIS 中使用 .INF 安装打印机

在win7 x64上安装Rstudio后,再打开,它提示我R没安装,可是我已经安装了。

在 Windows 7 x64 PC 上安装 node.js 的回滚