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