如何删除java中由windows使用/锁定的文件

时间:2009-11-17 11:52:27

标签: java windows file-io jar

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

有人知道一些解决方法吗?

4 个答案:

答案 0 :(得分:4)

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

您可以尝试这种方法。我在路上看到的唯一障碍是尝试自动化MAIN程序以关闭自己。唯一的可移植方式(在我的脑海中)是主应用程序通过本地套接字等待终止信号,更新程序可以通过本地网络发送命令。还有一件事你需要考虑的是updater必须在一个单独的java进程中运行。如果你的主程序只是创建一个新的Updater对象,那么Updater将与主程序的JVM共存,这会让你回到原点。

答案 1 :(得分:2)

我认为正确的做法是重新启动应用程序。事件,如果您可以在运行时更新jar,由于类版本,不同的类,不同的实现等,可能会发生所有类型的错误。

答案 2 :(得分:2)

OSGi已经解决了已经解决的问题

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

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

答案 3 :(得分:0)

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