Самостоятельно удалить банку из пакетного файла Windows

У меня есть Java-приложение, которое должно обновить себя, загрузив новую версию в Интернете, а затем оно должно само удалить себя, я уже управлял обновлением, теперь мне нужно удалить старый файл JAR. Так как мое приложение будет работать только на Windows, я думаю, что я мог бы использовать bat-файл, поэтому я написал код для создания командного файла, который должен закрыть JVM (чтобы jar-файл не был заблокирован), тогда он должен удалить JAR-файл, а затем он должен удалить файл bat (файл bat должен быть в состоянии самостоятельно удалить). Код такой:

String pat = new File("delete.bat").getAbsolutePath();
FileWriter fw = new FileWriter(pat);
PrintWriter pw = new PrintWriter(fw);
pw.println("taskkill /F /IM \"java.exe\"");
pw.println("DEL /F \""+ jarname +"\"");
pw.println("DEL /F \"delete.bat\"");
pw.close();
System.out.println("cmd /c START \"\" \"" + pat + "\"");
Runtime.getRuntime().exec("cmd /c START \"\" \"" + pat + "\"");

Это на самом деле работает не так уж и плохо, он удаляет банку и летучую мышь, но... после удаления все еще остается открытая командная строка, и это действительно ужасно видеть:/ Я даже попытался поставить выход после DEL /F "delete.bat", но так как летучая мышь уже удалена, она не может прочитать команду выхода... Некоторые идеи о том, как я могу закрыть подсказку?

2 ответа

Решение

Я решил с помощью Desktop.getDesktop(). Open(новый файл (pat));

Надеюсь, что это может кому-то помочь.

Вы можете закрыть командную строку двумя способами

  1. добавление Exit в последнюю строку сценария летучей мыши pw.println("выход");
  2. Запуск CMD с запуском, а не CMD

    Runtime.getRuntime(). Exec(" start \"\" \"" + pat + "\"");

Другие вопросы по тегам