3

我想运行一个用 C++ 编写的可执行文件,并在前台查看与之关联的 cmd 提示,因为该可执行文件会在 cmd 中打印一些行。

我编写了以下代码,但是所有进程都是在后台创建和运行的(在此代码中,我打开了虚拟 cmd.exe 进程,而不是我的进程)。

Process p = new ProcessBuilder("C:\\Windows\\System32\\cmd.exe").start();

如何启用进程的前台运行?

谢谢!

4

2 回答 2

3

问题不在于进程是在前台还是后台。当您使用 Java 启动一个进程时,您必须使用 Java 来控制该进程的生命周期。Java API 使您可以访问进程的各种属性。您在这里感兴趣的是该过程的输出。那是由过程'来表示的InputStream。这似乎违反直觉,但这是有道理的,因为从 Java 程序的角度来看,进程的输出就是程序的输入。相反,如果您需要将数据发送到进程,则写入进程' OutputStream

总而言之,访问进程'InputStream并将其打印到命令行:

Process process = new ProcessBuilder("C:\\Path\\To\\My\\Application.exe").start();

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

StringBuilder output = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    output.append(line);
}

System.out.println(line);

当然,这段代码假定您的进程不等待任何输入,即它不是交互式的。

于 2013-06-30T18:37:46.933 回答
0

Vivin Paliath 的答案确实是要走的路,然后你可以对输出做任何你想做的事情,在你自己的对话中显示它,记录它,解释它,检查错误等等。

但是以防万一您真的希望显示该命令窗口。执行 cmd.exe 并获取进程'OutputStream并将命令 (application.exe) 写入其中,并以新行结尾。

类似于以下内容:

Process p = new ProcessBuilder("C:\\Windows\\System32\\cmd.exe").start();
out = p.getOutputStream();
out.write("path\\application.exe\r\n".getBytes());
out.flush();

无论如何,通常也应该耗尽输入流。

于 2013-06-30T18:43:08.553 回答