JAR文件如何删除自己?

时间:2017-10-30 14:29:32

标签: java windows batch-file kill-process taskkill

我需要一个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回答。

1 个答案:

答案 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

它会在waiting 5 seconds

之后删除jar文件

为了测试,我使用javac Delete.java && jar cfe Delete.jar Delete Delete.class来构建jar,并使用java -jar Delete.jar来运行

我还验证了我无法在执行时删除jar文件,通过new File("Delete.jar").delete();并使用Windows资源管理器