在java中生成cmd shell使cmd.exe具有java目录的打开句柄

时间:2018-04-28 21:57:44

标签: java windows cmd handle

我有一个Java应用程序,我正在推动对捆绑的JRE的更新。这样做会让我重新启动应用程序,因为显然它在更换JRE时无法运行。我打开cmd并重命名旧文件夹,然后重命名新文件夹 - 这样,如果重命名失败,应用程序仍将启动旧版本。我没有足够的资源来建立一个更加完善的更新机制,而且我没有兴趣花时间为此开发一些东西。

我遇到了一个问题,但是从生成的cmd进程到java / lib / modules目录仍有一个打开的句柄。因此,它无法重命名,并且总是失败。

enter image description here

我无法弄清楚为什么这个句柄是开放的。我用来运行此更新脚本的代码是

public void runUpdateScript() {
    String[] command = {"cmd.exe", "/c", "start", "cmd.exe", "/c", ModManager.getTempDir() + "updater.cmd"};
    try {
        ProcessBuilder pb = new ProcessBuilder(command);
        pb.directory(new File(System.getProperty("user.dir")));
        pb.start();
        System.exit(0);
    } catch (IOException e) {
        // handler code goes here. Not necessary for this SO post
    }
}

我的脚本等待了4秒,我检查的时间远远超过了java.exe的结束时间。但不知何故有这个打开的文件句柄,我无法弄清楚原因。

0 个答案:

没有答案