“system32 \ java.exe”和“Program Files \ Java \ jdk1.6.0_33 \ bin \ java.exe”有什么区别?

时间:2012-06-16 13:28:41

标签: environment-variables java

我刚刚在Windows XP中安装了Java JDK 6u33。即使我没有设置PATH环境变量,我也可以在命令提示符下运行java -version

当我运行此命令for %i in (java.exe) do @echo. %~$PATH:i时,我得到了这个输出: C:\WINDOWS\system32\java.exe

当我检查我的电脑时,我发现有2个java.exe:
1. C:\Program Files\Java\jdk1.6.0_33\bin\java.exe
2. C:\WINDOWS\system32\java.exe

我可以知道system32\java.exeProgram Files\Java\jdk1.6.0_33\bin\java.exe之间有什么区别吗?为什么我运行system32\java.exe时只显示for %i in (java.exe) do @echo. %~$PATH:i

我还需要将C:\Program Files\Java\jdk1.6.0_33\bin\添加到我的PATH环境变量吗?

2 个答案:

答案 0 :(得分:28)

设置PATH变量只是为了让您可以访问javac以及jdk bin文件夹中的其他程序和工具。

提供java.exe中的\windows\system32\以便不是每个人都需要设置PATH变量来运行java程序(从命令行)选择版本(如果安装了多个(公开)安装的java虚拟机(JVM),则安装它的最后一个(似乎已经安装了)。

有关详细信息,请参阅此链接:

http://mindprod.com/jgloss/javaexe.html#MULTIPLES

引用:

  

为了使事情进一步复杂化,system32中的java.exe只是一个假人。   它在注册表中查找,然后决定使用哪个真正的java.exe。   安装的最后一个JVM将成为使用的JVM,即使它更旧。   要切换JVM,通常必须重新安装所需的JVM。

答案 1 :(得分:11)

(不是答案,而是对Mattias答案的评论) 不确定这个“虚拟”业务。 system32中的java.exe是普通文件,甚至不是符号链接或硬链接。 Mattias可能指的是这里解释的问题:http://msdn.microsoft.com/en-us/library/aa384187

简而言之,如果您有64位系统和Java安装,32位应用程序将无法看到安装在C:\ Windows中的java.exe(也不是javaw.exe,javaws.exe) \ System32 \因为它们将被呈现为C:\ Windows \ SysWoW64 \伪装成C:\ Windows \ System32。安装程序无法在SysWoW64中放置java.exe的副本,因此尝试启动Java的32位应用程序将无法执行此操作。如果用户使用资源管理器查看system32目录,这将使用户感到困惑,因为资源管理器是一个64位应用程序,因此将看到“真正的”system32目录。