3

我正在尝试编写一个 Java 应用程序,它应该使用一些参数调用一个 exe 文件并处理输出。我尝试了几种变体的 Runtime.getRuntime().exec() 以及 ProcessBuilder 类,但没有任何效果 - 它说它找不到文件,尽管路径环境变量是正确的。

出于想法,我尝试了以下方法:

File f = new File("C:\\Windows\\system32\\query.exe");
System.out.println(f.exists());

它说false

我想,也许路径有问题(反斜杠?大写?)并尝试了以下操作:

FileChooser chooser = new JFileChooser("C:\\Windows\\System32");
chooser.setFileHidingEnabled(false);
chooser.showOpenDialog(null);       
File f = chooser.getSelectedFile();
System.out.println(f.exists());

文件没有显示在FileChooser中(如果我在FileChooser中手动输入,结果false又是)。但我已经仔细检查过,它就那里。我现在打开了资源管理器窗口。我可以从 cmd.exe 中启动它。where query打印C:\\Windows\\System32\\query.exe

我认为这可能与访问权限有关,但我已经将查询文件的安全设置与其他可见的进行了比较;他们是一样的。我以管理员身份运行 Eclipse,结果相同。这里发生了什么?

4

1 回答 1

2

我怀疑问题是 JVM 作为 32 位进程执行而操作系统是 64 位,这意味着正在发生文件系统重定向器:

在大多数情况下,每当 32 位应用程序尝试访问%windir%\System32时,访问都会重定向到%windir%\SysWOW64.

如果您检查下C:\\Windows\\SysWOW64query.exe存在,请解释您正在目睹的行为。

于 2013-08-01T09:31:45.853 回答