【问题标题】:error when trying to execute exe from Runtime object in java尝试从 java 中的 Runtime 对象执行 exe 时出错
【发布时间】:2013-05-01 15:58:34
【问题描述】:

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

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

这是错误的假设吗?

【问题讨论】:

  • 您确定您的 PATH 包含“.”吗?
  • 仅供参考! Runtime.getRuntime().exec(cmdarray,null,dir);与开头定义的cmdArray不同。
  • @NoobUnChained 哦,哇!那是一个错字。在我的代码中是正确的。

标签: java windows runtime.exec


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我可以通过 cmd 提示符执行文件,没有权限问题
    • 现在文件在 C 盘中,我已经硬编码了路径以供测试。该文件应位于用户安装它的任何位置,因此如果确实如此,我需要它在 C 驱动器上工作。
    • 但如果用户对该驱动器有权限问题,它将无法正常工作!
    • @NoobUnChained 好的,我认为我使用的 cmd 窗口具有管理员权限。我打开了一个全新的 cmd 窗口并运行命令并得到以下信息:“在读取模式下打开配置文件时出错”。所以我认为这是一个权限问题。那么我将如何解决权限问题?
    • 系统管理员应授予该文件的特定用户帐户权限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多