【问题标题】:Autoupdate feature in a Java Swing desktop AppJava Swing 桌面应用程序中的自动更新功能
【发布时间】:2010-11-26 05:15:48
【问题描述】:

我开发了一个桌面 Swing 应用程序,我正在考虑提供自动更新功能的最佳方式。 我知道 JavaWebStart 提供了这个,但我认为它不适合我的需要,因为我需要读取本地文件,所以我需要对 jar 进行签名。此外,JWS 需要额外的工作来部署在服务器中,而现在我只需要上传 .jar。

我一直在考虑这种方法:

  • 第一个 JAR(永远不需要更新)加载启动画面,检查 config.xml 中的当前版本并将其与服务器 config.xml 进行比较。

  • 如果服务器版本较新,请询问用户是否要更新。在这种情况下,下载新的“main.jar”、新的“config.xml”和新的splash/icon,检查MD5SUM,用新文件替换旧文件。

  • 启动“main.jar”。

我不知道我是想重新发明轮子还是有比我上面提到的更好的模式。

【问题讨论】:

  • 您正在重新发明轮子并且您已经知道这一点,因为您提到了 Java WebStart。服务器上的部署是最小的,你只需要发布几个文件,服务器上不需要活动组件。
  • 我建议使用证书而不是检查来自 https 的哈希。使用散列技术,受感染的 https 服务器意味着破坏所有自动更新客户端。 / 还要检查您是否安装了更新的版本以避免降级攻击。 / WebStart 确实为使用文件提供了有限的界面,尽管文件浏览器的控制/自定义是有限的。
  • 我认为它不是那么小。我需要将它部署在完全不受我控制的服务器中。例如,我无法更改 mimetypes。此外,正如我所说,它需要访问本地文件,所以我需要对其进行签名。
  • 好吧,所以我可以使用 JWS 沙箱打开/保存文件而无需签名。那样的话,我再试试 JWS。

标签: java swing jar auto-update


【解决方案1】:

我们做了类似的事情。我们刚刚通过 https 得到它并下载了 jar。要知道您是否需要一个新的,我们只需检查流上的大小。从理论上讲,这可能行不通,但在实践中确实行得通。我们通过获取 jars 所在的目录列表、解析它并下载每个 jars 来变得更加出色,因此 jar 的名称也没有硬编码。不过,有几个难看的地方。

首先是启动一个新的 jvm 进程来启动新的 jar 并不是那么简单。

其次,如果您的更新在中间失败,您必须确保不会损坏您的 jar。

最后,没有办法用这个过程更新引导 jar。

【讨论】:

猜你喜欢
  • 2010-09-23
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 2010-11-02
  • 1970-01-01
  • 2011-01-19
  • 2011-06-05
相关资源
最近更新 更多