【发布时间】:2018-04-11 13:55:58
【问题描述】:
我需要一个 JAR 文件来删除自己。
问题是Windows在运行时会锁定JAR文件,不能直接删除自己。
我已经研究了批处理脚本可以杀死 JAR 进程然后删除文件的解决方案,但是
-
不需要
System.exit(0),因为它不能通过Batch文件运行。 -
taskkill /F /IM "java.exe"是不需要的,因为它会杀死 ALLJava进程。 -
jps不能使用 because it is only available in theJDK,用户可能会运行JRE,这样会失败。
我一直在寻找一种解决方案,让我使用Java 代码找到当前JAR 的PID,然后写出Batch 命令并插入PID,这会杀死进程例如像下面这样:
printWriter.println("taskkill /PID " + currentJARPID);
如果您想知道这是做什么用的,可以查看this 的答案。
【问题讨论】:
-
java文件能否读取bat文件输出,等待kill命令?还是必须在不与 java 文件交互的情况下从 bat 文件中终止文件?
-
@phflack:我必须从批处理文件中杀死
Java进程,以便JAR不再被锁定并且可以被删除。无法从Java代码中删除,因为由于Windows上的文件锁定,它无法同时运行和删除自身。 -
我明白了,我把问题改写一下:java进程能否读取.bat输出
-
您正在考虑的过程是否真正可靠地工作?如果 JVM 关闭——可执行文件上的锁被释放——比加载和执行批处理文件的速度更快,它可能会起作用。我承认事情可能会以这种方式进行,但我不知道如何保证。您能否不从批处理文件启动 JVM,然后让该批处理文件在 JVM 退出后删除 JAR?
标签: java windows batch-file kill-process taskkill