Bul*_*aza 2 java windows batch-file taskkill kill-process
我需要一个 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)
如果你想知道这是做什么的,你可以查看这个答案。
这是一个工作示例
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);
}
}
Run Code Online (Sandbox Code Playgroud)
为其提供动力的主要功能是 cmd /c ping localhost -n 6 > nul && del Delete.jar
等待 5 秒后删除 jar 文件
为了测试,我曾经javac Delete.java && jar cfe Delete.jar Delete Delete.class构建过 jar,然后java -jar Delete.jar运行
我还验证了我无法在执行时删除 jar 文件,通过new File("Delete.jar").delete();并使用 Windows 资源管理器
| 归档时间: |
|
| 查看次数: |
3943 次 |
| 最近记录: |