Как сам файл JAR удалить?

Мне нужен файл JAR, чтобы удалить себя.

Проблема в том, что Windows блокирует файл JAR во время его работы и не может удалить себя напрямую.

Я искал решения, в которых пакетный скрипт может убить процесс JAR, а затем удалить файл, но

  • System.exit(0) не желательно, потому что он не запускается через Batch файл.
  • taskkill /F /IM "java.exe" не желательно, потому что это убивает ВСЕ Java процессы.
  • jps не может быть использован, потому что он доступен только вJDK и пользователи могут запустить JRE так что не получится.

Я застрял в поиске решения, которое позволяет мне найти PID текущего JAR с помощью Java код, затем выписывая Batch команда и вставка PID который убивает процесс, например, следующим образом:

printWriter.println("taskkill /PID " + currentJARPID);

Если вам интересно, для чего это нужно, вы можете проверить этот ответ.

1 ответ

Решение

Вот рабочий пример

public class Delete
{
    public static void main(String[] args) throws Throwable
    {
        System.out.println("Running");

        System.out.println("Deleting");
        Runtime.getRuntime().exec("cmd /c ping localhost -n 6 > nul && del Delete.jar");

        System.out.println("Ending");
        System.exit(0);
    }
}

Главная особенность этого cmd /c ping localhost -n 6 > nul && del Delete.jar

Удаляет файл JAR после ожидания 5 секунд

Для проверки я использовал javac Delete.java && jar cfe Delete.jar Delete Delete.class построить банку и java -jar Delete.jar бежать

Я также подтвердил, что не могу удалить файл JAR во время его выполнения, через new File("Delete.jar").delete(); а также с помощью проводника Windows

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