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

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

当我像这样使用Runtime.getRuntime().exec()(case 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中关闭窗口.但我不知道怎么做…我怎么能这样做?

PS.我尝试在test.bat中写’exit’,但它不起作用.

最佳答案 对于java中的Runtime.exec(),这不是问题,如果打开cmd控制台并键入命令,则会遇到同样的问题.这是因为start没有退出(当命令完成时,带有标志C的cmd退出).

它不能通过在test.bat末尾添加exit来工作,因为你通过ctrl c执行了脚本,并且没有执行exit语句.

您可以尝试按以下方式更改呼叫以解决问题:

cmd /C start cmd /C test.bat
点赞