Как сам файл 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