尝试从java中的Runtime对象执行exe时出错

时间:2013-05-01 15:58:34

标签: java windows runtime.exec

我正在运行Windows 7并且有一个exe文件我试图在Java中使用以下命令运行:

File dir = new File("C:\\PATH\\TO\\DIR");
String[] cmdArray = {"file.exe"};

if(dir.exists()){
    for(String s : dir.list()){
        if(s.equals(cmdArray[0]))
            System.out.println("File exists!");
    }
}

Runtime.getRuntime().exec(cmdArray,null,dir);

然而,exec(...)命令给了我这个错误:

Cannot run program "file.exe" (in directory "C:\PATH\TO\DIR"): CreateProcess error=2, The system cannot find the file specified

上面的代码会打印出“文件存在!”所以文件在那里,Java知道它在那里。我不知道这是怎么可能的。

另外,我需要使用Runtime.getRuntime()。exex(...)。这个调用实际上是另一种我不想改变的方法,所以替代解决方案对我来说不起作用。提前谢谢!

编辑:我在没有管理员权限的cmd窗口中运行该文件,并收到以下消息:

Error in Opening Configuration File in Read Mode

所以我认为我有许可问题。我如何更改权限以便我能够运行它?

EDIT2:

我尝试将cmdArray更改为:

String[] cmdArray = {"C:\\PATH\\TO\\DIR\\file.exe"};

它就像一个魅力。但有一个问题。为什么这样做而不是其他方式?我假设Runtime.exec()在cmd wibndow中以如此高的速度运行:

pushd dir
cmdArray[0] cmdArray[1] cmdArray[2] ... cmdArray[length - 1]
popd dir

这是错误的假设吗?

2 个答案:

答案 0 :(得分:0)

您在C盘中遇到权限问题。通过在C盘中手动执行"file.exe"来检查.Better解决方案是将"file.exe"保留在C盘以外的某个位置并从那里执行

答案 1 :(得分:0)

也许,您需要将目录包含在path中。您可以查看this questionthis tutorial