【问题标题】:How to delete the Executable Jar File by it self?如何自行删除可执行 Jar 文件?
【发布时间】:2023-03-11 08:58:01
【问题描述】:

我开发了一个简单的java应用程序,应用程序(可执行Jar文件)是否可以找到它的当前路径并在一定时间后从当前位置和回收站中自行删除。

【问题讨论】:

  • 需要编写另一个 jar 来删除那个 jar... 通常,如果你正在编写病毒,你会这样做以防止人们找到你的踪迹,因为删除文件的程序是有罪的。大多数情况下,在 Windows 中,我们使用 Windows 安装服务来处理此类卸载...
  • @JohnVint 我不知道他的意图是什么,也许他正在尝试自动更新他的应用程序。在这种情况下,他应该知道如何正确地做到这一点。
  • @james 那是什么?你有 10 分钟的时间来为 John Vint 的评论找出好的解释:)
  • 你认为它是完成超级骗子病毒的唯一方法吗? :p
  • 这是一个专业的网站,你不应该这样跟我说话,因为你没有得到证明,其次,根据世界上的任何法律,你不能在我没有的事情上阻止我说。

标签: java multithreading


【解决方案1】:

不,当 java 运行时启动并使用这个 jar 文件时,windows 会阻止它被删除。在 Linux 等其他操作系统中,即使文件已被使用,您也可以删除它们。

【讨论】:

  • 这就是诀窍。您不能在 JVM 使用 jar 时删除它,但您可以做的是启动另一个 JVM(例如运行更新程序)并允许原始 JVM 退出,释放原始 jar...跨度>
【解决方案2】:

已经有问题/答案向您展示了如何获取当前运行的 jar 文件。请记住,这些方法在不同平台之间并不一致:

How to get the path of a running JAR file?

在 Java 中删除文件也相当简单:

import java.io.File;
...
new File("c:\\path\\to\\whatever.jar").delete();

在没有文件锁定的操作系统上,您可以简单地删除正在运行的 jar,因为它已经加载到内存中。在锁定文件的操作系统上,如果 JVM 决定锁定当前正在执行的 jar,这可能是不可能的。

【讨论】:

    【解决方案3】:

    在使用 jar 之前,Windows 严格限制您这样做

    是这样的:

    在 Linux 中,您可以在这里进行操作,How to delete a executing jar file

    【讨论】:

      【解决方案4】:

      为了删除jar文件,我推荐:

      • 创建 bat/sh 文件
      • 运行文件
      • 使用System.exit方法关闭jar文件

      在 bat/sh 文件中:

      • 循环直到删除成功
      • 删除自身内部的bat/sh文件(不像jar文件bat/sh文件可以自行删除)

      【讨论】:

        猜你喜欢
        • 2018-04-11
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多