自动更新ala Google Chrome工作流程

| 在公司里,我被要求写一个自动更新功能。即它应定期检查是否有新版本可用,下载新版本并在下次应用程序启动时以静默方式应用它。 我已经有东西可以运行了,但是它更像是一个肮脏的hack,而不是我对此感到高兴的东西。因此,我想知道如何设计和实施这样的解决方案。我可怕的黑客是这样的: 具有检查新版本是否存在的机制(数据库查询或Web服务) 下载包含整个新版本的完整zip。 检查文件签名。如果一切正常,请设置注册表值:必须更新为true。 应用程序重新启动时,如果必须更新值为true,则启动更新程序并存在。 此更新删除应用程序文件夹的内容,解压缩更新并替换旧内容,启动应用程序并退出。 现在,我想对其进行更改,以使其更清洁。我打算将更新作为bsdiff文件发送。它被下载。但是问题是,接下来会发生什么? 什么时候应用更新? 谁负责应用补丁?是程序本身还是像我所做的那样是第三个程序,它负责应用补丁并重新启动应用程序?     
已邀请:
您建议的工作流程或多或少都应该可以正常工作,但是不需要重新发明轮子-那里有很多库可以为您完成此工作。使用第三方库的好处是可以使代码更整洁,同时确保包含了肮脏的自动更新过程并且可以正常工作。 相信我,我知道。我是NAppUpdate的作者,NAppUpdate是.NET的应用程序更新框架(您可能想尝试或从中学习)。     
如果您采用C ++路线,则可以使用Chrome浏览器,下载Chrome源代码,然后四处浏览以查看更新的完成方式,这可能会为您提供一个更好的方法。这是一篇可能有帮助的文章。 如果您熟悉.NET,那么最近发布的nuget还具有自动更新功能,该功能可能会对您有所帮助,您可以从此处获取源代码。 David Ebbo有一个博客,介绍了如何在此完成。 我在Delphi上不是最新的,但是您可以使用以上任一选项。     
因此,在给了它很多东西之后,这就是我所用的(对于活动目录,我将指代主程序所在的目录,活动程序是主程序,更新程序是替换活动程序的目录,其资源文件): 活动程序每隔一定的时间检查是否有新版本。如果是这样,请下载 在单独的文件夹中准备新版本(可以通过将程序的目录内容复制到子目录并应用二进制补丁,或简单地将新版本解压缩来完成此操作)。 设置一个标志,指示已准备好新版本。 当程序退出时(这里必须控制不同的中断): 活动程序检查新版本就绪标志。启动更新程序并退出。 更新程序检查它是否可以写入活动目录。如果是这样,请用准备好的版本替换内容。 更新程序必须重新检查链接并相应地更新它们。 伙计们,如果您的工作流程更好,请告诉我。     
您可以通过使用Google Chrome更新程序从字面上使用Google Chrome更新工作流程: http://code.google.com/p/omaha/ 他们于2009年2月开源。     

要回复问题请先登录注册