自动更新的最佳实践

12

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

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

3个回答

17

一些小贴士:

无论你选择如何更新,请不要创建一个新的服务或进程来检查更新,然后让它一直运行。就像Adobe和Sun(Java)喜欢做的那样。无论你在制作什么,我可以保证它并不重要到需要每次用户启动计算机时都进行更新。更新应该与操作系统通用的标准化更新过程集成,或者当应用程序正在运行时进行。更新不应该持续占用系统资源或默认减慢启动过程。
如果你为每个版本维护单独的目录,则需要添加代码来维护它。磁盘空间不是用来支持更新的。我记得有一个Citrix应用程序在我的电脑上有5个不同的版本。用户不应该看到超过两个副本(最多一个备份,确认为可用)你的应用程序在他们的文件系统上,除非他们明确地将它们放在那里。这样的话,应用程序的快捷方式可能会因为文件夹位置的更改而过期,所以要小心。
如果你在程序启动后进行更新,我建议以不显眼的方式通知用户。如果更新不会导致功能上的显著变化,请在后台下载更新,在下次执行应用程序时切换到新版本,并通知用户有重大变化(不要使用模态对话框或窃取焦点)。不要让用户在启动应用程序之前点击按钮同意安装更新,也不要强制他们重新启动以使用更新的版本。允许用户配置自动更新,然后在不影响他们的生产力的情况下进行更新。Firefox在这方面做得相当糟糕,这很令人遗憾,因为它是许多用户不可或缺的应用程序。 不要触碰系统托盘。那应该留给有用(对用户)的应用程序。我也不建议使用气球通知。可以使用浏览器中常见的信息栏。Microsoft应用程序特别善于使用系统托盘和气球通知浪费用户时间,提供无关紧要的通知。如果用户启用了自动更新,他们真的不需要知道一切都按照他们的预期工作。告诉他们有什么新的或有用的东西,不要强迫他们接受知识。将更改日志留在帮助菜单项下,这样他们就可以自己检查错误修复。
在使用MSI系统更新时要小心默认配置文件。 你不想在更新中覆盖任何用户文件。同样,如果配置文件或用户文件的格式发生变化,你应该提供一种机制来自动备份和升级这些文件。或者开始在应用程序内部构建默认设置,而不是部署它们。 要注意带宽。大文件需要时间,可能会消耗用户的计量带宽。特别是如果你每天更新。

我想不起来有什么真正不会干扰的更新程序,但我记得过去有很多浪费了我的时间和资源。不要成为另一个这样的人。


8
最近Chromium团队的博客文章是一个很好的指南:http://blog.chromium.org/2009/01/google-chrome-installation-and-updates.html。基本上,当使用微软的ClickOnce时,做的事情是一样的,我迄今为止使用这种更新方法的应用程序没有任何问题,所以我认为这是一个“最佳实践”...但这只是我的看法。
具体来说,需要按照以下步骤进行:
1. 将每个版本存储在自己的唯一文件夹中。 2. 使用“启动器”启动可用的最新版本,并且... 3. 在应用程序启动后在后台检查是否有新版本。 4. 下载找到的任何新版本并为该版本创建一个新文件夹。
Google Chrome有点不同,因为他们使用Google Update服务来进行更新,但总体体验/周期基本相同。
用户启动应用程序,如果有任何新版本可用,则在后台下载。然后下次启动应用程序时,您的用户将自动获得新版本并(如果可能)静默地安装。

1

使用现有的框架

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

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


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