【问题标题】:Best practice for autoupdates自动更新的最佳实践
【发布时间】:2010-10-01 23:12:13
【问题描述】:
对于基于桌面的应用程序,执行自动更新的最佳做法是什么?目前,我们下载所有文件,然后复制并注册(如果是 com dll)到它们各自的目录。
我查看了谷歌浏览器的更新方法。它似乎首先将压缩文件下载到目录中,然后解压缩所有文件。此外,他们有一个似乎用于进行更新的设置应用程序。此外,他们创建了一个映射到更新版本(如 1.0.154.43)的目录,但他们保留了旧版本的目录。
【问题讨论】:
标签:
desktop-application
auto-update
【解决方案1】:
几个提示:
无论您选择如何执行此操作,请不要创建新服务或流程来检查更新,然后继续保持开启。你知道,就像 Adobe 和 Sun(针对 Java)一样。不管你在做什么,我可以保证它不够重要,以至于每次用户启动计算机时都需要更新它。更新应该与操作系统通用的标准化更新过程集成,或者在应用程序运行时集成。默认情况下,更新不应持续窃取系统资源或减慢启动过程。
如果您为每个版本维护单独的目录,则需要添加代码来维护它。磁盘空间并非旨在推动更新。我记得一个 Citrix 应用程序在我的计算机上一次有 5 个不同的版本。 用户在他们的文件系统上看到的应用程序副本不应超过两份(最多一份备份,确认可正常运行),除非他们明确将它们放在那里。当文件夹位置发生这样的变化时,应用程序的快捷方式可能会过时,所以要小心。
如果您在程序启动后进行更新,我建议以不突兀的方式通知用户。如果更新不会导致功能发生重大变化,请在后台下载更新,下次执行应用程序时切换到新版本,并通知用户重大更改(不要使用模态对话框或窃取重点)。不要让用户在启动应用程序之前单击按钮同意安装更新,或强制他们重新启动以使用更新的版本。允许用户配置自动更新,然后在不影响他们的工作效率的情况下进行。 Firefox 在这方面做得相当糟糕,这很可悲,因为它是许多用户不可或缺的应用程序。
请勿触摸系统托盘。这应该保留给有用的(对用户)应用程序。我也建议不要使用气球通知。使用浏览器中常见的信息栏之类的东西。 Microsoft 应用程序特别讨厌使用系统托盘和气球通知来浪费用户时间来处理不重要的通知。如果用户启用了自动更新,他们真的不需要知道一切都按他们预期的那样工作。当有新的或有用的东西时告诉他们,不要强迫他们接受这些知识。将更改日志留在帮助菜单项下,以便他们自己检查错误修复。
如果您部署默认配置文件,请小心使用 MSI 系统进行更新。 您不想覆盖更新中的任何用户文件。同样,如果配置文件或用户文件的格式发生变化,您应该提供一种机制来自动备份和升级这些文件。或者开始在应用程序内部构建默认设置,而不是部署它们。
注意带宽。大文件需要时间,并且可能需要用户计量带宽。特别是如果您每天更新。
我无法立即回忆起真正的非侵入式更新过程,但我可以回忆起过去浪费了我的时间和资源的很多事情。不要成为制造另一个人的人。
【解决方案2】:
Chromium 团队最近的博客文章是一个很好的指南:
http://blog.chromium.org/2009/01/google-chrome-installation-and-updates.html
基本上,当您使用 MS 的 ClickOnce 时会执行相同的操作,并且到目前为止我使用具有这种更新方法的应用程序没有问题,所以我想这归类为“最佳实践”......但这只是我。
- 将每个版本存储在其自己的唯一文件夹中。
- 使用“启动器”启动可用的最新版本并...
- 应用启动后在后台检查是否有任何新版本。
- 下载找到的任何新版本并为该版本创建一个新文件夹。
谷歌浏览器有点不同,因为他们使用谷歌更新服务进行更新,但整体体验/周期几乎相同。
您的用户启动一个应用程序,如果有任何新版本可用,它会在后台下载。然后下次启动应用程序时,您的用户会自动(如果可能)静默获取新版本。