2012-04-11 51 views
3

简而言之,您将如何设计支持直接可靠自动更新的应用程序?自动更新软件的设计

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

编辑:这是链接到这个问题:Self-destructing application

+3

通过Java Web Start部署? – assylias 2012-04-11 15:49:17

+1

正如@assylias [JWS]所提及的(http://stackoverflow.com/tags/java-web-start/info)是部署富客户端桌面应用程序的明显选择。如果应用程序。不是富客户端桌面应用程序,您需要更具体。 – 2012-04-11 15:51:53

+1

哦,顺便说一句 - 现在我记得你[最后一个问题](http://stackoverflow.com/questions/10107989/self-destructing-application)。 JWS几乎是你可以用来部署'自毁应用程序'的最差的技术。您不仅无法控制Jars的下载位置,甚至无法控制JWS应用程序。无法确定该位置在哪里。 ;) – 2012-04-11 15:55:10

回答

5

关注,需要加以处理:

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

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

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

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

3

Java网络启动协议在部署自动更新软件方面做得非常出色。本网站上的一些人报告了它的问题,但这可能是由于使用旧版本的Java或未正确设置JNLP文件。我发现它可以在Mac和Windows以及工作的个人电脑上工作,无需以管理员身份登录,我可以有效地“安装”我的软件。从用户的持续性来看,就像我给了她一个新的桌面应用程序。桌面上有一个程序图标,我的程序保存的文件与它相关联 - windows为它们提供了正确的图标,当你双击它们时,它们就会打开。但是每次她运行该程序时,JNLP都会首先检查本地存储的JAR文件与服务器上的内容,并且如果她的文件比我的服务器上的文件更旧,则会更新软件。这些程序的启动速度与原生Windows应用程序一样快,除了第一次下载所有内容时。

我们使程序自毁,这里有两种选择:

  1. 更改您坛子服务器上的文件是短期的和无用的。用户启动程序并进行更新,然后他们看到一个对话框,告诉他们该程序不再可用。您也可以通过这种方式禁用功能。但这会一次影响所有用户。您可以创建多个不同的JNLP文件,每个文件针对不同类别的用户,并为您的应用程序提供相同的时间线,甚至可以让服务生成JNLP文件。但是禁用它的控件仍然会来自您更改服务器上的罐子。

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

如果您不熟悉使用JNLP来autonate更新,这里是一些背景知识,以帮助您入门:

JNLP文件是描述您的应用程序存储在网上和一个XML文件它需要运行哪些JAR文件。应用程序的各种属性也被指定,如启动画面,桌面图标,更新风格(总是询问,只是在没有提示的情况下进行提升,在后台更新)以及与程序关联的文件。

Read the JNLP developer guide了解如何使其工作的详细实例。

你也可以在网上看到很多例子。在Chrome浏览器中,JNLP文件的默认行为是保存它,在其他浏览器中,您可能需要右键单击并另存为,但只有在存在与文件的直接链接而不是一个花哨的JavaScript按钮时才起作用。然后你可以用你喜欢的文本编辑器打开JNLP文件作为例子。
The swing tutorials使用JNLP文件来演示代码。