分享一个客户端程序(winform)自动升级程序,思路+说明+源码

做winform的程序,不管用没用过自动更新,至少都想过自动更新是怎么实现的.

我这里共享一个自动更新的一套版本,给还没下手开始写的人一些帮助,也希望有大神来到,给指点优化意见.

本初我是通过socket来传输文件的,后来因为传大文件出现异常,前期又没有定义比较好的协议,后来就改用webservices了.

自动更新分三个部分,服务端(webservice服务,配置与更新),配置客户端(或叫发布客户端),客户端(主程序)

服务端:        

ConfigServer.asmx

因为代码共享了,就不传代码了,发个截图吧.

      负责与配置客户端交互,对文件的发布(软件上传),及版本维护.

      这里为了考虑大文件的问题,每次上传是分包传送的.UploadFileModel 是分包的定义,这个由配置端来决定分包值.

public class UploadFileModel
    {
        string _RelativePath;
        /// <summary>
        /// 相对路径
        /// </summary>
        public string RelativePath
        {
            set
            {
                _RelativePath = value;
            }
            get
            {
                if (_RelativePath != string.Empty && _RelativePath.Substring(_RelativePath.Length - 1) != "\\")
                {
                    _RelativePath += "\\";
                }
                return _RelativePath;
            }
        }
        /// <summary>
        /// 文件名
        /// </summary>
        public string FileName { set; get; }
        /// <summary>
        /// 文件流
        /// </summary>
        public byte[] FileStream { set; get; }
        /// <summary>
        /// 开始该文件位置
        /// </summary>
        public int StartPosition { set; get; }
        /// <summary>
        /// 是否完成该文件的传送了
        /// </summary>
        public bool IsFinish { set; get; }
        /// <summary>
        /// 整个文件流的长度
        /// </summary>
        public long FileStreamLength { set; get; }
        /// <summary>
        /// 文件的最后更新时间
        /// </summary>
        public DateTime FileLastTime { set; get; }
        /// <summary>
        /// 当前是第几包
        /// </summary>
        public int CurrentPackIndex { set; get; }
        /// <summary>
        /// 总共第几包
        /// </summary>
        public int MaxPackIndex { set; get; }
    }

       考虑上传的文件内容有可能含子文件夹,这里有相对路径的配置.

UpdateServer.asmx  负责与客户端交互,用于下载需要更新的文件.

      

       有两个服务,GetFileList 获取文件列表,与本地文件通过版本号筛选出要更新的文件信息.

GetFile 用于更新文件,RequestFileModel 定义了要请求文件的指定长度的文件流(其实也是可以按分包来下载,具体怎么分包是有客户端来定义)

public class RequestFileModel
    {
        /// <summary>
        /// 文件id
        /// </summary>
        public long FileId { set; get; }
        /// <summary>
        /// 开始该文件位置
        /// </summary>
        public int StartPosition { set; get; }
        /// <summary>
        /// 读取文件流的长度(一次读取多少字节)
        /// </summary>
        public int ReadFileLength { set; get; }
    }

  

配置客户端:

        

     主界面操作比较简单,需要注意的就是发布的时候是选择一个发布文件夹,要发布的文件由该文件夹指定,因为要获取相对路径.

         

        上传文件的具体流程代码就不发了,下载源码自己看吧,分包的发送,不过是计算出每次发送的字节,告诉服务器发了多少,是不是完成了.

    更新客户端:

         

      我这写的更新客户端比较简单而已不是自动,需要手动点击,这个根据需求可以稍微改一下,或者干脆不用这个界面,因为上传的相关操作已经封装起来了.

本地文件信息我是通过一个FileInfo.data的文件来记录的.

关于app.config里面有三个配置项.

DownloadPath 是更新的文件放到哪个文件夹下.

UpdateServerUrl 是webservices的服务地址.

MainApp 更新完成之后需要更新的主程序,通过Process.Start()方法来调用.

当所有文件下载完成后,会把FileInfo.data 文件信息更新.

最后总结一下自动更新的整体流程:

1.访问更新服务,获取所有文件信息.

2.比较服务器文件信息,与本地文件信息做比较,筛选出需要下载的文件信息;

3.下载需要更新的文件,保存至指定目录下.

4.如果指定目录存在,将指定目录下的文件替换现有程序文件,删除已更新的文件夹及所有文件,然后启动主程序;

5.启动主程序,并替换更新程序(如果需要更新的话,更新程序会起别名放于相同目录下)

共享代码里webservices端有两个类库,这个数据操作,配置内容是放到sqlite库中的,这两个类库可在bin下找到.

源码下载

时间: 2024-08-25 19:35:10

分享一个客户端程序(winform)自动升级程序,思路+说明+源码的相关文章

基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息

每次升级,客户端都会获取服务器端存放在upgradefile文件夹下的需要升级的文件和升级信息配置文件(即upgradeconfig.xml文件) 我们来看一下代码 //升级信息配置文件相对应的类 ( 升级信息配置文件是由这个类转化成的) private UpgradeConfig upgradeConfig = null; //客户端存储升级配置文件的地址 是放在客户端根目录下的 (就是把服务器 upgradefile/upgradeconfig.xml下载到客户端存放的位置) string

SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework

9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Load事件或者Program入口的Main方法第一行代码加上如下代码: 注意:是主程序的 Load事件要加上调整自动更新程序的代码.要以模式打开窗口.如果没有差异会自动关闭升级窗口显示主窗口. 3.把下面目录里的文件拷贝到 应用程序的同级目录下: 4.配置WINFORMS应用程序目录下Updateli

基于TCP网络通信的自动升级程序源码分析-客户端接收文件

升级程序客户端接收文件 /// <summary> /// 文件数据缓存 索引是 ConnectionInfo对象 数据包的顺序号 值是数据 /// </summary> Dictionary<ConnectionInfo, Dictionary<long, byte[]>> incomingDataCache = new Dictionary<ConnectionInfo, Dictionary<long, byte[]>>();

【开源下载】基于TCP网络通信的自动升级程序c#源码

本程序使用开源的来自英国的networkcomms2.3.1网络通讯框架(c#语言编写) [http://www.networkcomms.net] 使用networkcomms框架作为工作中的主要编程框架1年多的时间了,networkcomms的有优美.稳定深深打动了我,基于此框架开发了不少程序,特别的稳定. networkcomms框架由英国剑桥的2位工程师开发,支持.net2.0以上平台,原生态的支持xamarion.android(安卓),xamarin.ios,以及蓝牙等多平台开发.

基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序

升级程序启动后,首先会连接服务器 private void Connect() { try { int port = int.Parse(System.Configuration.ConfigurationManager.AppSettings["Port"]); connnectionInfo = new ConnectionInfo(IPAddress, port); connection = TCPConnection.GetConnection(connnectionInfo)

c# 软件自动升级 程序自我关闭自己后重启

//指定一个文件名,写入脚本 string filename = Path.Combine(path,"killmyself.bat"); using (StreamWriter bat = new StreamWriter(filename, false, Encoding.GetEncoding("GB2312"))) { //删除指定程序,复制指定程序到指定路径 bat.WriteLine(string.Format(@" @echo off del

c#Winform程序的toolStripButton自定义背景应用示例源码

C# Winform程序的toolStrip中toolStripButton的背景是蓝色的,如何改变背景及边框的颜色和样式呢? 实现此功能需要重写toolStripButton的Paint方法 这里只是给出解决问题的思路和方法,如下图,当鼠标移到按钮上,背景会变为黑色 实现代码如下: ToolStripButton tsb = (ToolStripButton)sender; Rectangle rectButton = tsb.Bounds; Point p = toolStrip1.Poin

Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战

Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品时,结算时满足一定条件会减免一定金额.通过发放优惠券,引导用户购买相应的商品,在下单的时候抵扣一定的费用,达到促销.提高客单价的目标. 优惠券不论在线上还是线下,适用范围都比较广泛.例如滴滴发的专车券.外卖平台发的外卖券.京东淘宝的优惠券等. 1.优惠券的类型和应用场景 优惠券有多种分类方式,按照使

c# winform 中的 工具栏自动隐藏 splitter用法 带源码

代码下载地址 http://download.csdn.net/detail/simadi/7649313 c# winform 中的 工具栏自动隐藏 splitter用法 带源码,布布扣,bubuko.com