2009-01-17 89 views
10

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

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

回答

7

从铬队最近的一篇博客是一个伟大的指南:

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

基本上,当您使用MS的ClickOnce的同样的事情做,我有使用这样的更新方法,这样应用程序没有问题远,所以我想这个分类为“最佳实践”......但这只是我。

  1. 将每个版本存储在自己的唯一文件夹中。
  2. 使用“启动器”启动最新版本可用和...
  3. 在应用程序启动后检查后台的任何新版本。
  4. 下载找到的任何新版本并为该版本创建一个新文件夹。

谷歌浏览器有点不同,因为他们使用谷歌更新服务来进行更新,但整体体验/周期几乎相同。

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

15

几个秘诀:

  • 无论您如何选择,请致电请不要创建新的服务或进程来检查更新,然后继续保持连接。你知道,就像Adobe和Sun(对于Java)一样。无论您制作的是什么,我都可以保证每次用户启动计算机时都需要更新并不重要。更新应该与OS通用的标准化更新过程或应用程序运行时集成。更新不应该持续窃取系统资源或默认放慢引导过程。

  • 如果您为每个版本维护单独的目录,则需要添加代码以维护该目录。磁盘空间不是为了加速更新。我记得一次在我的电脑上安装了5个不同版本的Citrix应用程序。 用户在其文件系统上不应看到多于两个副本(最多一个备份,确认为功能),除非他们明确将它们放在那里。当文件夹位置像这样改变时,应用程序的快捷方式可能会过时,因此请小心。

  • 如果您在程序启动后更新,我会建议以非强迫性的方式通知用户。如果更新不会导致功能发生重大变化,请在后台下载更新,下次执行应用程序时切换到新版本,并通知用户重大更改(不要使用模态对话框或窃取焦点)。不要让用户在启动应用程序之前点击按钮同意安装更新,或者强制他们重新启动以使用更新的版本。允许用户配置自动更新,然后在不影响生产力的情况下执行更新。 Firefox对此很不好,这很令人伤心,因为它对许多用户来说是一个完整的应用程序。

  • 请勿触摸系统托盘。这应该保留给用户(对用户)有用的应用程序。我也建议不要使用气球通知。使用类似浏览器中常见的信息栏。微软应用程序对于使用系统托盘和气球通知来浪费用户时间和不重要的通知尤其不利。如果用户启用了自动更新,他们实际上并不需要知道一切正常,就像他们预期的那样。告诉他们什么时候有新东西或有用的东西,不要强迫他们的知识。将更改日志保留在帮助菜单项下,以便他们可以自行检查错误修复。

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

  • 有带宽意识。大型文件需要时间并可能从用户计量带宽。特别是如果你每天更新。

我记不起真正的非侵入式更新程序,但我记得过去浪费了我的时间和资源的很多东西。别成为别人的家伙。