WinForm App自动更新(Live Update)架构

文/guozhijian  出处/博客园

VS2008、C#

一. 基本思路
    一直做Web Form开发,最近开始尝试了一下Win Form,做了一个小系统,在发布了第一个可用版本之后,顺便实现了自动更新功能。之前没有这方面的经验,也没有翻阅相关资料,自己想了一个简单的思路,如有笑话之处,恳请批评指正。
    基本上就是这样的:
    客户端有两个子程序,简单的讲就是两个EXE,一个主的应用程序,一个自动Live Update程序,而在服务端,是一个WCF,提供程序版本更新信息和更新文件。
    每当程序启动(或手动点“检测更新”),主程序会调用服务端的WCF检测更新,若检测到新版本,则启动Live Update程序,同时关闭自身。
    Live Update启动后,调用服务端WCF,获取文件列表,然后直接下载更新文件并覆盖本地文件。完毕后启动主程序,同时关闭自身,这样,一次自动更新就完了。
二. 系统架构

 附件: 您所在的用户组无法下载或查看附件   
三. 序列图

 附件: 您所在的用户组无法下载或查看附件   

四. 其它
1. 检测新版本
    在WCF中会有一个XML配置文件,用于客户检测版本和更新文件。
   
2. 下载文件以及覆盖旧文件
    Live Update下载文件后先保存在临时文件夹,下载完毕后再从临时文件夹覆盖主应用程序的旧文件。防止自动更新中途失败导致主应用程序不可用。

3. WCF Contract(仅供参考)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace WendyFinance.UpdateCenter.Contract {

    [ServiceContract]
    public interface IAutoUpdate {

        [OperationContract]
        bool CheckUpdate(string clientVersion);

        [OperationContract]
        string GetCurrentVersion();

        [OperationContract]
        string GetUpdateDescription();

        [OperationContract]
        List<string> GetFileList();

        [OperationContract]
        string GetFile(string fileName);
    }
}

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C#] 的这些文章也感兴趣:

C# 操作 XML 数据库类型(Oracle XMLType)
什么是映射(reflection)?
C#3.0 新特性速览(2)
.net程序员的盲点(二):两个“属性”引起的歧异
创建不规则窗体和控件(1)
检测远程URL是否存在的三种方法
Winform自定义绘制TreeView
C#中Dispose和Close的区别
开发者面临的.Net挑战(三)
从WindowsDNA到.NET(1)