自动更新-自动更新谷歌Chrome工作流程



在我所在的公司,我被要求编写一个自动更新函数a la chrome。也就是说,它应该定期检查是否有新版本,下载新版本,并在下次应用程序启动时静默应用。

我已经有一些东西在运行,但它更像是一个肮脏的黑客,而不是我对此感到高兴的东西。所以,我想知道如何设计和实现这样的解决方案。我可怕的黑客攻击是这样的:

  1. 有一个机制来检查是否存在新版本(数据库查询或web服务)

  2. 下载全新版本的完整zip。

  3. 检查文件签名。如果一切顺利,请设置一个注册表值:必须更新为true。

  4. 当应用程序重新启动时,如果必须更新的值为true,则启动更新程序并存在。

  5. 更新将删除应用程序文件夹的内容,解压缩更新并替换旧内容,启动应用程序并退出。

现在,我想把它换一下,这样它就更干净了。我计划将更新作为bsdiff文件发送。它被下载。但问题是,接下来会发生什么?

何时应用更新?谁负责敷贴?是程序本身,还是像我一样,是第三个程序负责应用补丁并重新启动应用程序?

如果你走的是C++路线,你可以去Chrome下载Chrome源代码,并四处查看更新是如何完成的,这可能会让你更好地了解如何进行更新。下面是一篇可能会有所帮助的文章。

如果你熟悉.NET,最近发布的nuget也有一个自动更新功能,这可能很有用,你可以从这里获得源代码。David Ebbo有一个关于如何在这里完成的博客。

我不是最新的德尔福,但你可能可以使用上面的任何一个选项。

您提出的工作流或多或少是应该工作的,但没有必要重新发明轮子——有很多库可以为您做到这一点。使用第三方库的好处是保持代码的清洁,同时确保自动更新的脏过程得到控制并完美工作。

相信我,我知道。我是NAppUpdate的作者,这是一个.NET的应用程序更新框架(你可能想试用或学习它)。

所以,在给了它很多之后,这就是我带来的(对于活动目录,我会指主程序所在的目录,活动程序是主程序,更新程序是替换活动程序及其资源文件的程序):

  • 活动程序每隔一段时间就会检查是否有新版本。如果是,请下载
  • 在一个单独的文件夹中准备新版本(这可以通过将带有程序的目录内容复制到一个子目录并应用二进制补丁来完成,或者简单地解压缩新版本)
  • 设置一个标志,指示新版本已准备就绪

当一个程序退出时(在这里必须控制不同的中断):

  • 活动程序检查新版本就绪标志。启动更新程序并退出
  • 更新程序检查它是否可以在活动目录中写入。如果是,请将内容替换为准备好的版本
  • 更新程序必须重新检查链接并相应地更新它们

所以,伙计们,如果你们有更好的工作流程,请告诉我。

您可以通过使用Google Chrome更新程序来使用Google Chrome的更新工作流程:

http://code.google.com/p/omaha/

他们于2009年2月开源。

最新更新