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'停止批处理文件,
当我使用' Ctrl-C'在案例1中,cmd控制台停止但仍保留窗口和提示行。
但是当我使用' Ctrl-C'在案例2中,cmd控制台停止并关闭窗口!!
我希望在案例1中关闭窗口。但我不知道怎么做......我怎么能这样做?
PS。我试着写出退出'在test.bat中,但它无法正常工作。
答案 0 :(得分:2)
在java中Runtime.exec()
不是问题,如果打开cmd控制台并键入命令,则会遇到同样的问题。这是因为start
没有退出(当命令结束时,带有标志C的cmd
退出)。
在test.bat末尾添加exit
并不起作用,因为你通过ctrl + c杀死了脚本的执行,并且没有执行exit语句。
您可以尝试按照以下方式更改通话以解决问题:
cmd /C start cmd /C test.bat