与Java中的ProcessBuilder混淆

时间:2014-01-05 09:13:26

标签: java processbuilder

我第二次使用ProcessBuilder从系统调用中提取的值出现问题。

@org.junit.Test
public void test() {
    Process process = null;
    ProcessBuilder pb = new ProcessBuilder("QQ.exe");
    pb.directory(new File("D:\\Program Files (x86)\\Tencent\\QQ\\Bin\\"));
    try {
        process = pb.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

    }

上面的结果是:“无法运行程序”QQ.exe“(在目录”D:\ Program Files(x86)\ Tencent \ QQ \ Bin“):CreateProcess error = 2,系统不能找到指定的文件“

那么Process.dir()的功能是什么? 有人告诉我,我指定的目录是运行进程的工作目录 - 它无助于查找可执行文件。 但是以下代码可以正常运行

@org.junit.Test
public void test() {
    Process process = null;
    ProcessBuilder pb = new ProcessBuilder("cmd","/c","QQ.exe");
    pb.directory(new File("D:\\Program Files (x86)\\Tencent\\QQ\\Bin\\"));
    try {
        process = pb.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

    }

qq.exe不在路径中。谁能告诉我为什么?我是中国人。我不擅长英语,所以请原谅我的英语道歉。

1 个答案:

答案 0 :(得分:1)

ProcessBuilder.directory(java.io.File)定义进程的工作目录,而不是“启动”,所以:

案例1: QQ.exe以工作目录D:\\Program Files (x86)\\Tencent\\QQ\\Bin\\启动,但未找到QQ.exe(不在%PATH%中)

案例2: cmd.exe以工作目录D:\\Program Files (x86)\\Tencent\\QQ\\Bin\\启动,然后启动并找到QQ.exe(cmd位于%PATH%和{{ 1}}在当前的工作目录中)

我们可以假设QQ.exe启动进程然后执行工作目录更改。