为什么 java 不能从 c:\Windows\System32 执行?

为什么 java 不能从 c:\Windows\System32 执行?

直到几天前,我还可以从命令行运行 Java 应用程序,然后就出现了问题。我把问题追溯到无法从 c:\Windows\System32 调用 java.exe。即使我提供了完整的路径名 (c:\windows\system32\java.exe),它仍然无法执行““c:\Windows\System32\java.exe” 未被识别为内部或外部命令、可运行程序或批处理文件。“。我尝试将其复制到同一目录中的不同名称,但仍然不起作用。只有当我将 java.exe 复制到不同的目录并将该目录放入 PATH 中时,我才最终使其工作,所以这是我的解决方案,但我仍然想知道为什么它停止从 c:\Windows\System32 执行,而几个月后它却在那里运行良好!

答案1

您的问题可能与 64 位和 32 位 Java JRE 安装有关。我遇到了类似的问题,我可以看到

C:\Windows\System32\java.exe

但无法运行。我发现一个线程这暗示应该有一份文件的副本

C:\Windows\SysWOW64\java.exe

让 64 位 Java 从 32 位应用程序执行。

就我而言,我知道公司的安全补丁使我的安装变得混乱,因为它本来可以工作,但在我允许补丁运行之后却无法工作。

答案2

如果您想从命令行执行 java,则应将其添加到路径中。转到控制面板 -> 系统 -> 高级系统设置,然后转到高级选项卡并单击环境变量。查找名为 PATH 的系统变量,并将其附加;C:\Path\to\java\bin到它。现在您应该能够从 cmd.exe 运行 java。

答案3

java.exe 位于 C:\Windows\system32 中,因为该目录几乎肯定会比大多数其他目录更早出现在您的路径中。也就是说,无论您安装了什么 JRE 或 JDK,它都是一种确保在您的路径中首先找到此 java.exe 的方法。

这个 java.exe 的作用是检查你的注册表以查看应该启动哪个真正的 java.exe,然后启动那个 java.exe 来替换它自己。

结果是,如果您想要运行特定版本的 Java,并且您没有管理员权限(您可以编辑用户路径但不能编辑系统路径),那么您需要编辑注册表以使您想要的版本成为 C:\Windows\system32 中的 java.exe 选择的版本。

根据 Oracle 的 Java 1.6.x 文档:“Microsoft Windows 版本的 Java SE 运行时环境的安装程序使用注册表来记录路径和版本信息。系统目录中的应用程序启动器使用注册表设置来获取启动应用程序时要使用的 Java SE 运行时环境的位置。”

... 和 ...

“安装了两个 java.exe 可执行文件的副本。一个副本位于 JRE 的 bin 目录中。第二个副本位于 C:\windows\system 或 C:\winnt\system32 中,具体取决于系统。由于它位于系统目录中,因此可以从任何目录位置启动 java.exe 的第二个副本,而无需提供它的完整路径。

java.exe 可执行文件的第二个副本依赖于 CurrentVersion 注册表设置来确定使用哪个注册表项来查找 JRE 的位置。例如,如果 CurrentVersion 注册表设置为 1.6,则系统目录中的 java.exe 可执行文件将查看 HKEY_LOCAL_MACHINE\Software\JavaSoft\Java SE Runtime Environment\1.6 键来确定 JRE 的安装位置。

相关内容