自动更新介绍
我们做了程序,不免会有版本升级,这就需要程序有自动版本升级的功能。应用程序自动更新是由客户端应用程序自身负责从一个已知服务器下载并安装更新,用户唯一需要进行干预的是决定是否愿意现在或以后安装新的更新。
客户端程序要完成自动更新必须要做三件事情:检查是否有更新;当发现有更新时,开始下载更新;当下载完成时,执行更新操作;分别分析一下这三个步骤:
1、检查更新
客户端要正确检查是否有更新需要三个必要过程:
(1)到哪里去更新。即目标服务器的URI(URL或具体目录)
(2)何时去检查。即更新的频率,每隔多长时间检查一次。
(3)通过什么方式检查。通讯协议,如HTTP、FTP、FILE等。
(4)如何检查。如在后台运行,且开启独立线程。
2、下载更新
在普通用户眼里,下载是一件再普通不过的事情了,但在开发者眼里我们需要考虑更多。我想需要考虑的如下:
(1)到哪里去下载。即目标Server的URI。
(2)通过什么方式下载。HTTP、FTP、FILE等,且断点续传。
(3)如何下载。在后台开启独立线程以不影响主线程工作。
(4)应对异常。如中断连接后自动重新连接,多次失败后抛弃等。
3、实现更新
实现更新不能简单地认为是一个文件的覆盖问题,原因很简单:一个正在被使用的文件是无法被覆盖的。也就是说程序自己是无法更新自己的。这样看来,实现更新有两种方案:
(1)在主程序之外,另开启一个独立进程来负责更新主程序。但前提是在更新前必须强制用户退出主程序,很多现有产品就是这样做的,如QQ。
(2)主程序根据下载的文件,生成一个比目前存在版本新的应用程序版本,用户在下次重新打开应用程序时会自动使用新版本,同时原始应用程序的拷贝就可以被移除了。
二、可用框架
在.NET Framework2.0以后,微软提供了采用内置的ClickOnce部署方式来实现系统更新,配置比较麻烦应用起来也不是很方便。.NET也有许多流行的开源自动更新组件如下:
序号 名称 地址
这里我们想介绍的是开源自动更新框架NAppUpdate,NAppUpdate能很容易的和任何.Net桌面应用程序(包括WinForms应用应用和WPF应用程序)进行集成,针对版本订阅、文件资源、更新任务提供了灵活方便可定制接口。而且可支持条件更新运行用户实现无限制的更新扩展。
下面我们也会通过一个具体的实例来说明怎么在.NET桌面程序中使用NAppUpdate进行系统升级和更新。
三、NAppUpdate
NAppUpdate组件使用特定的xml文件来描述系统版本更新。Xml文件中包括下面内容,文件更新的描述信息、更新需要的特定逻辑、和更新需要执行的动作。
3.1 在项目中使用NAppUpdate
很简单的就能集成到项目中:
(1)在项目添加NAppUpdate.Framework.dll引用。
(2)添加一个Class文件到项目进行更新检查(具体参考后面实例)。
(3)根据版本更新的需要修改配置更新“源”。
(4)创建一个最小包含NAppUpdate.Framework.dll文件的运行包。
发布更新:
(1)Build项目
(2)手工创建或使用NAppUpdate内置提供的FeedBuilder工具创建更新xml配置文件。
(3)把生成的文件放入服务器版本更新URL所在位置。
(4)创建一个最小包含NAppUpdate.Framework.dll文件的运行包。
3.2 NAppUpdate工作流程
NAppUpdate如何更新系统:
(1)根据不同种类的更新需求,系统应该首先创建一个UpdateManager的实例,例如如果使用SimpleWebSource这种类型的更新,则需要提供URL指向远程版本发布目录。
(2)我们的系统通过调用NAppUpdate组件的CheckForUpdates方法,获取更新信息。
(3)NAppUpdate下载版本描述的XML文件,通过比较这个文件来确定是否有版本需要更新。
(4)我们的系统调用NAppUpdate方法PrepareUpdates来进行更新初始化,下载更新文件到临时目录。
(5)NAppUpdate解压一个updater可执行文件(.exe)到临时目录中。
(6)最后,我们系统调用NAppUpdate的方法ApplyUpdates(结束程序,执行更新,最后再启动程序)。