【C#】在线更新--下载

版权声明:我的博客我做主! https://blog.csdn.net/lk1822791193/article/details/85197762

在线更新的方法多种多样,在这里我们分享一下我的思路!

本地系统的版本号存在系统额配置文件中,新系统的版本号存在服务的数据库中,通过查询数据库的版本号和本地的版本号进行对比,判断是否更新。

与此同时,在数据库中同时记录下,服务器中文件路径和文件名字(如果有需要,数据库中也可以记录版本更新内容),这样通过一次查询,就得到了你需要的所有信息。

下载更新的代码:

      using System.Net;  
      //调用的WCF服务                 
      using DAL.UpdateServiceTest;

      public List<string> SelectUpdatNews()
      {
            List<string> stringList=null;
            //判断用户是否联网
            if (NetWorkState.IsNetWorking())
            {
                //正常联网
                //创建WCF服务客户端
                UpdateServiceClient client = new UpdateServiceClient();
                //接受服务器的版本等信息
                stringList = client.SelectVersion();
                //返回服务器的版本等信息              
            }  
            return stringList;         
      }

      //从服务器中下载新系统安装包
      public void DownLoadFile()
      {
                //数据库返回的更新文件的信息

                //SelectUpdateNews是调用的WCF查询服务器新版本文件的信息
                //它可以直接通过远程查询实现
                List<string> stringList = SelectUpdatNews();
      
                //更新文件的路径
                string url = stringList[0].ToString();

                //建立连接服务器的客户端
                WebClient wc = new WebClient();

                // GetCurrentDirectory
                // 摘要:获取应用程序的当前工作目录。
                // 返回结果:包含当前工作目录的路径且不以反斜杠 (\) 结尾的字符串。
                string dir = System.IO.Directory.GetCurrentDirectory();

                // Combine
                // 将字符串数组组合成一个路径
                string fileName = System.IO.Path.Combine(dir, fileName + ".zip");
                
                //连接服务器的用户名和密码
                wc.Credentials = new System.Net.NetworkCredential("admin", "Radmin");

                //下载文件(路径,文件名)
                //路径形式: ftp://192.168.**.***/ftp/最新系统.zip
                //文件名形式:  最新系统.zip(可以通过字符串截取获得)
                wc.DownloadFile(url, fileName);

                // 释放由 System.ComponentModel.Component 使用的所有资源
                wc.Dispose();
       }

首先解释一下:线程。一大家都知道一个进程包括多个线程(就像一个包里边有多个类一样),一个程序进行时,为了能让程序能进行多个操作,我们就需要在开始一个进行。

为什么要启用多线程,为了给用户更好的用户体验,在程序执行的时候,我们后台自动将需要更新的文件下载到本地,这样的话,用户只需要等待你安装的时间。

        public bool IsUpdate()
        {
            bool flag=false;
            string newVersion;
            //配置文件中获取系统的版本号
            string oldVersion = ConfigurationManager.AppSettings.Get("version");
            //获取服务器的版本号
            List<string> stringList = SelectUpdatNews();
            newVersion = stringList[2].ToString();

            //在这里需要判断一下,用户电脑是否联网,没有联网是复发下载的       
            if(NetWorkState.IsNetWorking())
            {
                //判断本地系统的版本号和服务器中的版本号是否一致
                if (oldVersion == newVersion)
                {
                    flag = false;
                }
                else
                {
                    flag = true;
                }
            }    
            
         } 

          //在程序启动的后端代码中
          //判断是否新版本更新
          if(IsUpdate())
          {
              //创建一个线程,上边的DownLoadFile方法
              Thread thread = new Thread(DownLoadFile());
              //开始线程
              thread .Start();   
          }
               

通过这种方法,就能实现:版本对比,远程下载。(后续还会更新如何解压和替换旧的系统,实现更新)。

小编只是简单总结实现,如有不足,欢迎大神指点!

猜你喜欢

转载自blog.csdn.net/lk1822791193/article/details/85197762