【问题标题】:How to delete file which is used/locked by windows in java如何删除java中Windows使用/锁定的文件
【发布时间】:2010-12-17 10:17:03
【问题描述】:

我有一些应用程序,它具有自我更新的能力。它从网上下载jar文件,然后尝试用下载的jar替换使用的jar来运行这个应用程序。 但我不能这样做,因为文件被 Windows 锁定,因为应用程序仍在运行。

有人知道解决方法吗?

【问题讨论】:

    标签: java windows file-io jar


    【解决方案1】:

    对此的一种流行解决方案是将更新程序作为单独的程序运行。您是否注意到 Firefox 在更新时必须重新启动?那是因为一个单独的进程 (updater.exe) 正在更新文件,然后再次启动 Firefox。

    您可以尝试这种方法。我看到的唯一障碍是试图使 MAIN 程序自动关闭。唯一可移植的方法(在我的脑海中)是让主应用程序通过本地套接字等待终止信号,并且更新程序可以通过本地网络发送命令。您必须考虑的另一件事是更新程序必须在单独的 java 进程中运行。如果您的主程序只是创建了一个新的 Updater 对象,则 Updater 将与主程序的 JVM 共存,这将您带回到第一个问题。

    【讨论】:

      【解决方案2】:

      我认为正确的做法是重新启动应用程序。如果你可以在 runtime 更新 jar 的事件,之后可能会因为类版本、不同的类、不同的实现等而发生各种错误。

      【讨论】:

        【解决方案3】:

        这是 OSGi已经解决的问题。

        真正的问题是不加载新的 jar 版本。这可以通过您自己的释放文件锁的类加载器来完成。真正的问题是如何handle instances of different versions of the same class

        重启确实忽略了这些问题。如果您确实需要在一个应用程序中使用不同的 jar 版本,请使用 OSGi。

        【讨论】:

          【解决方案4】:

          执行此操作的典型方法是编写一个单独的更新程序,当您的主程序看到更新时将调用该更新程序。这时候你的主程序可以在一个新进程中启动更新程序并退出。您的更新者可以等待主程序退出,下载并复制更新的文件并重新启动您的主程序

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-10
            相关资源
            最近更新 更多