我对这个东西很新,但基本上是:有程序,有流程.程序是在执行时生成进程的文件.
如果仍有与之关联的进程,则无法删除该程序.该过程需要先被杀死.
这似乎也适用于Java程序.但是我很好奇为什么 - 不是整个东西都加载到JVM中了吗?
我需要一个 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);
Run Code Online (Sandbox Code Playgroud)
如果你想知道这是做什么的,你可以查看这个答案。