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

What is the difference between Runtime.getRuntime().exec() and double click to execute batch file?

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 控制台 window 打开,并启动 test.bat。

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

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

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

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

我想在案例 1 中关闭 window。但我不知道怎么做..我该怎么做??

ps。我尝试在 test.bat 中写入 'exit',但它不起作用。

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

在test.bat末尾加exit是不行的,因为你ctrl+c杀死了脚本的执行,exit语句没有执行。

您可以尝试如下更改您的调用以解决问题:

cmd /C start cmd /C test.bat