我需要一个JAR文件来删除它自己。
问题是Windows在JAR文件运行时会锁定它,并且无法直接删除它。
我已经研究过批处理脚本可以杀死JAR进程然后删除文件的解决方案,但是
System.exit(0)
不合适,因为它无法通过Batch
文件运行。taskkill /F /IM "java.exe"
不合适,因为它会杀死所有 Java
进程。jps
无法使用because it is only available in the JDK
,用户可能会运行JRE
,因此会失败。我一直在寻找一种解决方案,让我可以使用PID
代码找到当前JAR
的{{1}},然后写出Java
命令并插入杀死进程的Batch
例如如下:
PID
如果你想知道这是为了什么,你可以查看this回答。
答案 0 :(得分:3)
这是一个工作示例
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
为了测试,我使用javac Delete.java && jar cfe Delete.jar Delete Delete.class
来构建jar,并使用java -jar Delete.jar
来运行
我还验证了我无法在执行时删除jar文件,通过new File("Delete.jar").delete();
并使用Windows资源管理器