我第二次使用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不在路径中。谁能告诉我为什么?我是中国人。我不擅长英语,所以请原谅我的英语道歉。
答案 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
启动进程然后执行工作目录更改。