Windows 7中的“哪个java”命令返回奇怪的路径

时间:2013-06-25 08:29:11

标签: java windows windows-7 command-line command

根据此处的文档link

要找出第一个在PATH中找到的java可执行文件,请执行:

which java

此命令在我的机器中返回以下三个路径

C:\>which java
C:\Windows\system32\java.EXE
C:\Program Files (x86)\Java\jre7\bin\java.EXE
C:\Windows\System32\java.EXE

C:\ Windows \ System32中没有java.exe。 我在位置C:\Program Files (x86)\Java\jre7\安装了java(Java SE 7 Update 25) 运行“where java”

也证实了这一点
C:\>where java
C:\Program Files (x86)\Java\jre7\bin\java.exe

我在环境变量中设置了Path=C:\Program Files (x86)\Java\jre7\bin;。此路径未在任何环境变量中使用。

我想知道的是,which java返回C:\Windows\System32\java.EXE的方式和原因是什么以及为什么呢?

由于Windows中没有本地which命令,我发现已创建which.exe以使用以下脚本模仿“which”

@for %%a in (%PATH%) do @if exist %%a\%1 (
 for /f %%b in ('dir /b %%a\%1') do @echo %%a\%%b
)

@rem for %a in (%PATH%) do @if exist %a\which* dir /b /w %a\which*

3 个答案:

答案 0 :(得分:1)

system32中的java.exe看起来很奇怪,但是当你没有java.exe时就好了。更奇怪的是,我的Windows7上没有“which”命令,只是在哪里。 “哪个”可能来自PATH上的其他路径?

答案 1 :(得分:1)

您的操作系统必须是64位Windows 7。你的jre和哪个命令是32位应用程序。 64位操作系统将%SystemRoot%\system32目录用于其64位库和可执行文件。这是出于向后兼容性原因而完成的,因为许多遗留应用程序都是硬编码以使用该路径。执行32位应用程序时,WoW64透明地将32位DLL重定向到%SystemRoot%\SysWoW64,其中包含32位库和可执行文件。 因此,32位应用程序的C:\Windows\system32\java.EXE实际上是C:\Windows\SysWoW64\java.EXE

答案 2 :(得分:0)

在我的系统上,我java.exe也有C:\WINDOWS\system32。并javaw.exejavaws.exe。事实证明,这些文件与C:\Program Files\Java\jdk7\bin中的文件完全相同。因此,Java安装程序似乎可能会将它们复制到系统目录中,以防止出现路径问题。