更新正在使用的.jar文件

时间:2013-09-12 02:53:17

标签: java windows jar

我有一个C#程序,可以更新然后启动Java应用程序。在实际启动Java之前,它会检查程序使用的.jar文件的更新。多个人可能一次在给定的计算机上运行应用程序(它可能是终端服务器),或者同一个用户正在运行该程序的多个实例。如果其他人正在运行该应用程序,则.jar文件将被使用且无法更新。我正在努力解决这个问题。

我的偏好是重命名.jar文件并更新它。当前运行该应用程序的所有人仍然可以使用重命名的jar文件。 Windows也不会让你重命名正在使用的文件(虽然我认为Unix系统会这样)。

我注意到,使用Windows资源管理器,您可以复制/粘贴jar文件并覆盖正在使用的.jar文件。这是如何工作的,我可以在更新程序/启动程序中以某种方式执行类似的操作吗?

我可以使用其他任何方法吗?

3 个答案:

答案 0 :(得分:1)

我想说没有(简单的)方法来实现这一目标。我能想到的一些想法可能是;

  • 将更新下载到单独的下载位置。每次启动应用程序时,请尝试安装更新,如果有任何失败,请回滚并稍后重试。
  • 使用某种锁文件指示程序正在运行或正在进行更新并采取相应措施。例如。如果您有更新并且“运行”和“更新”锁定文件不存在,请创建“更新”锁定文件并安装更新,完成后删除“更新”锁定。如果您进行更新并且存在“更新”锁定文件,请等到“更新”锁定文件被删除,您可能需要在安装之前再次检查更新。如果您有更新并且存在“正在运行”锁定,则必须跳过更新过程...
  • 告诉所有连接的用户,他们将被强行断开连接,并在一段时间后重新启动服务器。当时间段结束时,终止正在运行的应用程序并更新服务器。您可能希望添加某种“锁定”机制,以防止应用程序的新实例开始启动,直到更新过程完成....

答案 1 :(得分:0)

更新jar文件并将其放在新位置。然后更改类路径以从新位置而不是旧位置获取更新的jar。如果在两个地方都找到了文件,那么您可以根据您的要求决定偏好。另一个要点是,如果多次引用相同的jar,那么将首先加载在类路径中按顺序排在第一个jar的那个jar。

答案 2 :(得分:0)

创建两个文件夹:旧的和新的

它们都包含相同的文件。没有更新时,每个人都将使用新文件夹中的文件。当有更新时,将jar文件从新文件夹复制到旧文件夹,每个新连接将使用旧文件夹中的jar文件,直到与新文件夹中的jar文件的每个连接都消失。最后,当每个人都使用旧文件夹中的jar文件时,将更新复制到新文件夹中(当然,所有这些都应该是自动的),最后,在更新完成后,每个新连接都将使用新文件中的jar文件夹。我希望这会有所帮助。