编程语言
首页 > 编程语言> > 错误:引起:java.io.IOException:CreateProcess error = 2,系统找不到指定的文件.适用于所有可执行文件

错误:引起:java.io.IOException:CreateProcess error = 2,系统找不到指定的文件.适用于所有可执行文件

作者:互联网

我的目标是根据我的要求从java运行SVN命令,因为我已经安装了TortoiseSVN命令行工具.在我的环境“Path”变量中添加了相应的路径“C:/ Program Files”/ TortoiseSVN / bin“.

通过上面的设置,我可以使用说“svn –version”从windows命令行运行我的svn命令,它完全正常.

现在回到执行相同的代码,我正在使用processbuilder.但是我最终得到了上面的错误 – java.io.IOException:无法运行程序“svn –version”:CreateProcess error = 2,系统找不到指定的文件.

我已经尝试过了,

>使用ProcessBuilder.environment检查Path和PATH值. Path是emply,但是PATH配置了所有必需的应用程序路径,包括“TortoiseSVN / bin”路径.因此,清除ProcessBuilder的理论在其路径中没有可执行位置.
>执行时,我试图给出完整的路径,即“C:/ Program Files / TortoiseSVN / bin / svn.exe”,而不仅仅是svn –version.这也给出了同样的错误.
>我为其他可执行文件尝试了相同的代码,例如“java -version”,它也因同样的异常而失败.

我现在有一种非常基本的感觉是不对的.但是现在尝试了一天以上,但是我没有得到任何线索.

还有一件事,我在Windows 7机器上运行它.

以下是我正在使用的代码,

    import java.io.BufferedReader;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;

    public class RunningExecutable {

public static void main(String[] args){
    String command = "svn --version";

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    try {           
        ProcessBuilder svnProcessBuilder = new ProcessBuilder(command);
        String PATH = svnProcessBuilder.environment().get("PATH");
        System.out.println("PATH - " + PATH);

        String path = svnProcessBuilder.environment().get("Path");
        System.out.println("Path - " + path);

        Process procObject = svnProcessBuilder.start();

        BufferedReader cmdStreamReader = new BufferedReader(new InputStreamReader(procObject.getInputStream()));
        String cmdOutput;
        while ((cmdOutput = cmdStreamReader.readLine()) != null) {
            outputStream.write((cmdOutput + "\n").getBytes());
        }
        System.out.println("O/p - " + outputStream.toString());
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Throwable th) {
        th.printStackTrace();
    }
}
    }

期待任何提示/指示.

谢谢,
玉萍

解决方法:

这是因为您没有正确使用ProcessBuilder. Javadocs非常明确.

您不能将–version参数作为您尝试调用的进程名称的一部分传递;那不是进程的文件名.在幕后你直接执行一个过程 – 没有涉及到shell.

ProcessBuilder svnProcessBuilder = new ProcessBuilder("svn", "--version");

标签:processbuilder,java,eclipse,executable
来源: https://codeday.me/bug/20191002/1843940.html