Runtime.getRuntime().exec()和双击执行批处理文件有什么区别?

4

Runtime.getRuntime().exec()和双击执行批处理文件有何区别?

当我使用Runtime.getRuntime().exec()(情况1)执行批处理文件时,如下所示:

String[] command = {"cmd.exe", "/C", "Start", "D:\\test.bat"};
Process p =  Runtime.getRuntime().exec(command);  

或者
Process p = Runtime.getRuntime().exec("cmd /c start "+"D:\\test.bat")

一个新的cmd控制台窗口打开,并启动test.bat。

如果我尝试通过桌面上的鼠标双击执行test.bat(情况2),它也会在新的cmd控制台窗口中打开并启动应用程序。

但是当我尝试停止test.bat时就出现了问题。我使用'Ctrl-C'来停止批处理文件。

在情况1中使用'Ctrl-C'时,cmd控制台停止但仍然保留窗口和提示行。

但是,在情况2下,当我使用'Ctrl-C'时,cmd控制台停止并关闭窗口!

我想在情况1下关闭窗口。但我不知道该怎么做..我该怎么办?

附注:我尝试在test.bat中写入“exit”,但它没有起作用。

1个回答

2

在Java的Runtime.exec()中,你遇到了问题,如果你打开一个cmd控制台并键入命令,同样会遇到这个问题。这是因为start没有退出(而带有C标志的cmd在命令完成后就会退出)。

在test.bat的末尾添加exit并不起作用,因为您使用ctrl+c终止了脚本执行,并且退出语句没有被执行。

您可以尝试按照以下方式更改调用以解决问题:

cmd /C start cmd /C test.bat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接