自动更新软件的设计

时间:2012-04-11 15:42:45

标签: java desktop auto-update

简单地说,您如何设计支持直接可靠的自动更新的应用程序?

我对它如何被切割以及涉及的各种操作感兴趣。

修改:这与此问题相关联:Self-destructing application

2 个答案:

答案 0 :(得分:5)

需要处理的问题:

  • 如果更新的应用程序本身正在更新,则需要重新启动,或者需要执行存根以将文件移动到位(到避免使用中文件错误。)

  • 无论您通过网络请求通过哪种服务来检索文件,都需要知道您正在运行的已安装软件包的当前版本。它会动态构建文件URL列表,甚至可以压缩文件并将其放在客户端的单个URL中。否则,让客户端遍历URL列表,拉动每个文件。每个URL都与一个操作相关联,例如“复制”或“执行”。

  • 处理每个检索到的文件并将其安装到客户端。

  • 更新需要是原子的(如果操作的任何部分失败,则能够回滚。)您不希望处于部分状态。

答案 1 :(得分:3)

Java网络启动协议可以轻松部署自动更新软件。此站点上的某些人报告了它的问题,但这可能是由于使用旧版本的Java或未正确设置JNLP文件。我发现它在Mac和Windows以及工作中的PC上运行良好而无需以管理员身份登录,我能够有效地“安装”我的软件。从用户的角度来看,就像我给她一个新的桌面应用程序一样。桌面上有一个程序图标,程序保存的文件与它相关联 - 窗口为它们提供了正确的图标,当你双击它们时它们会打开。但每次她运行该程序时,JNLP首先检查她本地存储的JAR文件与我服务器上的文件,如果她的文件比我服务器上的文件旧,则软件会更新。这些程序的启动速度与本机Windows应用程序一样快,除了第一次下载所有内容之外。

现在让程序自毁,这里有两个选项:

  1. 将服务器上的jar文件更改为简短且无用。用户启动程序,它会更新,然后他们会看到一个对话框,告诉他们程序不再可用。您也可以通过这种方式禁用功能。但这会立即影响所有用户。您可以创建几个不同的JNLP文件,每个文件用于具有相同时间线的不同类别的用户,您甚至可以让服务生成JNLP文件。但是,禁用它的控件仍将来自您更改服务器上的jar。

  2. 程序启动时,首先联系Web服务以验证程序是否仍在运行。您可以创建一个数据库表,将用户与他们现在可以使用的功能相关联。如果您的用户没有注册,您需要以某种方式为他们首次运行程序时创建一个id,将其放在db表中并使用首选项api将其存储在客户端的计算机上。

  3. 如果您不熟悉使用JNLP进行自动更新,可以参考以下内容来帮助您入门:

    JNLP文件是一个XML文件,用于描述应用程序在线存储的位置以及运行所需的JAR文件。还指定了应用程序的各种属性,例如启动画面,桌面图标,更新样式(总是询问,只是提升而不提示,在后台更新)以及与程序关联的文件。

    Read the JNLP developer guide详细了解如何让它发挥作用。

    您还可以在线查看大量示例。在Chrome中,JNLP文件的默认行为是保存它,在其他浏览器中,您可能需要右键单击并另存为,但只有在存在指向文件的直接链接而不是花哨的javascript按钮时才有效。然后,您可以在您喜欢的文本编辑器中打开JNLP文件作为例子 The swing tutorials使用JNLP文件来演示代码。

相关问题