java - 更新正在使用的 .jar 文件

标签 java windows jar

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

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

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

我还可以使用其他方法吗?

最佳答案

我想说没有(简单)的方法可以实现这一点。我能想到的几个想法可能是:

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

关于java - 更新正在使用的 .jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18754552/

相关文章:

java - 简单的 Java HTTPS 服务器

java - 显示已编译类文件中的泛型类型参数

windows - Windows 命令提示符命令文件的位置

java - jInterop - 访问被拒绝 [0x00000005]

java - 在构建过程中集成系统测试

vb.net - 以编程方式检测鼠标和键盘是否已插入

windows - hg 作为 Windows 服务

java - 如何从类路径中获取 ResourceBundle 文件?

android - 在 Netbeans Android 项目 (nandroid) 中包含外部 jar

java - 如何以编程方式启动 apache derby jar 文件?