我刚刚在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.exe
和Program 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环境变量吗?
答案 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目录。