我想运行一个用C ++编写的可执行文件,并在前台看到与它关联的cmd promt,因为可执行文件在cmd中打印了一些行。
我编写了以下代码,但所有进程都是在后台创建并运行的(在此代码中我打开了虚拟cmd.exe进程,而不是我的进程)。
Process p = new ProcessBuilder("C:\\Windows\\System32\\cmd.exe").start();
如何启用进程的前台运行?
谢谢!
答案 0 :(得分: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);
当然,这段代码假定您的流程不等待任何输入,即它不是交互式的。
答案 1 :(得分: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();
无论如何,通常也应该排出输入流。