我有一些应用程序,它有能力自我更新。它从网上下载jar文件,然后尝试通过下载一个来替换用过的jar来运行这个应用程序。 但我不能这样做,因为文件被Windows锁定,因为应用程序仍在运行。
有人知道一些解决方法吗?
答案 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)
执行此操作的典型方法是编写一个单独的更新程序,当主程序看到更新时,它将由主程序调用。此时,您的主程序可以在新进程中启动更新程序并退出。您的更新程序可以等待主程序退出,下载并复制更新的文件并重新启动主程序