自动更新的最佳做法

时间:2009-01-17 08:46:40

标签: desktop-application auto-update

对于基于桌面的应用程序,执行自动更新的最佳做法是什么?目前,我们下载所有文件,然后复制并注册(如果com dll)到他们各自的目录。

我查看了Google Chrome更新方法。它似乎首先将压缩文件下载到目录中,然后解压缩所有文件。此外,他们有一个设置应用程序,似乎用于进行更新。此外,他们创建一个映射到更新版本的目录,如1.0.154.43,但它们保留旧版本的目录。

3 个答案:

答案 0 :(得分:15)

一些提示:

  • 无论您选择如何操作,请不要创建新服务或流程来检查更新,然后再将其保留。你知道,就像Adobe和Sun(Java)一样。无论您正在制作什么,我都可以保证每次用户启动计算机时都需要更新它并不重要。更新应与操作系统通用的标准化更新过程集成,或者在应用程序运行时集成。默认情况下,更新不应持续窃取系统资源或降低启动过程。

  • 如果为每个版本维护单独的目录,则需要添加代码来维护它。磁盘空间不是为了推动更新。我记得一个Citrix应用程序一次在我的计算机上有5个不同的版本。 用户不应在其文件系统上看到应用程序(最多一次备份,确认为功能),除非他们明确地将它们放在那里。当文件夹位置发生这种变化时,应用程序的快捷方式可能会过时,所以要小心。

  • 如果您在程序启动后更新,我建议以非突兀的方式通知用户。如果更新未导致功能发生重大变化,请在后台下载更新,在下次执行应用程序时切换到新版本,并通知用户重大更改(不要使用模式对话框或窃取焦点)。在启动应用程序之前,请勿让用户单击按钮同意安装更新,或强制他们重新启动以使用更新的版本。允许用户配置自动更新,然后在不影响其工作效率的情况下执行此操作。 Firefox对此非常不好,这很令人难过,因为它是许多用户的完整应用程序。

  • 请勿触摸系统托盘。这应保留给有用的(对用户)应用程序。我也建议不要使用气球通知。使用像浏览器中常见的信息栏之类的东西。 Microsoft应用程序在使用系统托盘和气球通知时使用不重要的通知浪费用户时间特别糟糕。如果用户启用了自动更新,他们实际上并不需要知道所有内容都正常运行。告诉他们什么时候有新的或有用的东西,并且不要强迫他们了解他们的喉咙。将更改日志保留在“帮助”菜单项下,以便他们可以自行检查错误修复。

  • 如果部署默认配置文件,请注意使用MSI系统进行的更新。 您不想覆盖更新中的任何用户文件。同样,如果配置文件或用户文件的格式发生变化,您应该提供自动备份和升级这些文件的机制。或者在应用程序内部开始构建默认设置,而不是部署它们。

  • 有带宽意识。大文件需要时间,并且可能会耗费用户的计量带宽。特别是如果你每天更新。

我不记得一个真正的非侵入式更新程序,但我记得很多,这些都浪费了我过去的时间和资源。不要成为另一个人。

答案 1 :(得分:7)

最近来自Chromium团队的博客文章是一个很好的指南:

http://blog.chromium.org/2009/01/google-chrome-installation-and-updates.html

基本上,当你使用MS的ClickOnce时也会做同样的事情,到目前为止我使用这种更新方法的应用程序没有问题,所以我想这被归类为“最佳实践”......但这只是我。

  1. 将每个版本存储在自己唯一的文件夹中。
  2. 使用“启动器”启动可用的最新版本...
  3. 在应用程序启动后检查后台是否有任何新版本。
  4. 下载找到的所有新版本,并为该版本创建一个新文件夹。
  5. 谷歌浏览器有点不同,因为他们使用谷歌更新服务进行更新,但整体体验/周期几乎相同。

    您的用户启动应用程序,如果有任何新版本,则会在后台下载。然后,下次应用程序启动时,您的用户将自动获取新版本(如果可能),然后静默。

答案 2 :(得分:1)

使用现有框架

在MacOS X上:使用Sparkle框架http://sparkle.andymatuschak.org

在Linux上:创建包&为您支持的发行版设置存储库