问题
I need a JAR file to delete itself.
The issue is that Windows locks the JAR file while it is running, and can't delete itself directly.
I have looked into solutions where a batch script could kill the JAR process and then delete the file, but
System.exit(0)
is not desired because it is not runnable viaBatch
file.taskkill /F /IM "java.exe"
is not desired because it kills ALLJava
processes.jps
cannot be used because it is only available in the JDK and users might run aJRE
so that would fail.
I'm stuck on looking for a solution which lets me find the PID
of the current JAR
using Java
code, then writing out a Batch
command and inserting the PID
which kills the process e.g. like the following:
printWriter.println("taskkill /PID " + currentJARPID);
If you're wondering what this is for, you can check this answer.
回答1:
Here is a working example
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);
}
}
The main feature powering this is cmd /c ping localhost -n 6 > nul && del Delete.jar
It deletes the jar file after waiting 5 seconds
To test, I used javac Delete.java && jar cfe Delete.jar Delete Delete.class
to build the jar, and java -jar Delete.jar
to run
I also verified that I could not delete the jar file while it was executing, through new File("Delete.jar").delete();
and also using Windows Explorer
来源:https://stackoverflow.com/questions/47017755/how-can-a-jar-file-delete-itself