我该如何实现自动更新程序?

81
许多程序都包括自动更新程序,该程序会定期在线查找更新,并下载和应用发现的任何更新。程序错误被修复,支持文件被修改,事情变得更好(通常如此)。
不幸的是,无论我如何搜索,我都找不到有关此过程的信息。似乎已经实施的自动更新程序要么是专有的,要么不被认为很重要。
看起来很容易实现在网络上寻找更新并在可用时下载它们的系统。这个自动更新程序的那部分将从实现到实现变化很大。问题是应用补丁的不同方法是什么。只是下载文件并用新文件替换旧文件、运行已下载的迁移脚本、猴子补丁系统的某些部分等等?概念优先,但Java、C、Python、Ruby、Lisp等语言的示例将不胜感激。

6
我一直在查看谷歌的omaha。如果你仍然感兴趣的话,这可能是值得关注的东西(4年后...)。 - funseiki
17个回答

0

0
在Java-Webstart设置中,您启动一个JNLP文件,然后触发下载运行应用程序所需的Jar文件。每次Webstart都会检查是否有更新版本的Jars,并下载它们以替换本地缓存的文件。使用名为jardiff的工具,您将仅创建与新版本Jars的差异,并通过服务器分发这些差异(例如,仅获取更新)。
优点:
  • 始终保持最新状态
缺点:
  • 您需要一个应用程序服务器(Tomcat、JBoss)才能分发文件
  • 您需要互联网连接才能获取应用程序

只需一个Web服务器即可分发JAR文件。Tomcat是这样的服务器之一,也实现了Servlet规范。 - Camilo Díaz Repka

0

阅读Carl Seleborg的答案给了我一些想法,关于如何使用通用代码存储库。

svn带有一个名为svnsync的工具,它的行为有点像svn导出,但会跟踪您导出的实际版本。

有人可以利用此系统,仅从用户实际版本中获取更改的文件。

实际上,您将拥有一个已编译二进制文件的存储库,并且运行svnsync将仅获取已修改的二进制文件。它还可以将基于文本的配置文件的本地更改与新的配置选项合并。


0

将补丁安装到程序中的功能基本上是安装程序的基本功能之一。安装程序软件在许多地方都有记录,但通常是按照每个安装程序的方式进行记录:其中包括Microsoft Installer(带有Install Shield扩展)、Ruby gemsJava .jar文件、各种Linux软件包管理系统(RPMApt-get)等。

这些都是解决一般程序修补问题的复杂系统,但适用于略有不同的系统。要决定哪种方法最适合您,请考虑您的应用程序最像哪个系统。自己编写也可以,但查看这些系统是一个好的起点。


0

您可以编写应用程序的内部模块来进行更新。您也可以编写外部迷你应用程序来进行更新。

此外,可以查看.NET即时编译技术,它使得在需求时即可动态创建这样的迷你应用程序成为可能。例如,http://fly.sf.net/


0
经过数小时的搜索,我终于为在Linux和Windows上运行的Python脚本实现了自动更新机制。
简而言之,脚本在运行实际工作之前会检查S3上是否有更新,如果有,则下载、解压缩,创建或更新符号链接(或在Windows上创建联接),并使用原始参数重新运行具有新版本的脚本。
完整的源代码和说明可以在这里找到。

-2

如果您正在寻找跨平台软件更新解决方案,请查看www.updatenode.com

一些亮点:

  • 对于开源项目免费
  • 跨平台和开源的更新客户端工具
  • 已本地化为最重要的语言
  • 易于集成和操作
  • 基于云的管理平台,用于定义和管理更新
  • 提供额外的支持以显示消息(通知新事件、产品等)
  • Web界面是开放的(您可以使用服务创建自己的客户端)
  • 许多使用统计信息,如使用的操作系统、地理位置、版本使用情况等
  • Android API 用于移动应用程序更新

试试吧。

顺便说一句,我是开源客户端开发团队的一员。 :)


2
你是在updatenode.com工作吗?因为你回答了几个旧问题并推荐它。 - crashmstr
我正在为开源客户端开发做出贡献:https://bitbucket.org/updatenode/unclient - sarahara
1
你可能应该阅读这篇文章:如何在回答中提及自己的产品? - crashmstr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接