如何在Java中删除被Windows使用/锁定的文件

6

我有一个应用程序,可以自行更新。它从网络上下载jar文件,然后试图用下载的jar文件替换正在运行此应用程序的已使用的jar文件。 但是,由于应用程序仍在运行,因此Windows锁定了该文件,我无法这样做。

有人知道解决方法吗?

4个回答

4

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

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


3

这已经是OSGi解决的问题了。

真正的问题不是加载新的jar版本。这可以通过自己的类加载器来完成,释放文件锁定。真正的问题是如何处理同一类的不同版本的实例

重新启动可以避免这些问题。如果您确实需要在一个应用程序中使用不同的jar版本,请使用OSGi。


2

我认为在这里正确的做法是重新启动应用程序。即使您可以在运行时更新jar文件,由于类版本、不同的类、不同的实现等各种错误可能会在之后发生。


0

通常的做法是编写一个单独的更新程序,当主程序检测到更新时会调用它。此时,主程序可以在新进程中启动更新程序并退出。您的更新程序可以等待主程序退出,下载并复制更新文件,然后重新启动主程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接