详解C# WinForm如何实现自动更新程序

 更新时间:2022年10月13日 15:52:03   作者:Csharp小记  
在C/S这种模式中,自动更新程序就显得尤为重要,它不像B/S模式,直接发布到服务器上,浏览器点个刷新就可以了。本文就为大家准备了WinForm实现自动更新程序的示例代码,需要的可以参考一下

前言

在C/S这种模式中,自动更新程序就显得尤为重要,它不像B/S模式,直接发布到服务器上,浏览器点个刷新就可以了。由于涉及到客户端文件,所以必然需要把相应的文件下载下来。这个其实比较常见,我们常用的微信、QQ等,也都是这个操作。

自动更新程序也分为客户端和服务端两部分,客户端就是用来下载的一个小程序,服务端就是供客户端调用下载接口等操作。

这里第一步先将服务端代码写出来,逻辑比较简单,使用xml文件分别存储各个文件的名称以及版本号(每次需要更新的时候,将需要更新的文件上传到服务器后,同步增加一下xml文件中对应的版本号)。然后比对客户端传进来的文件版本,若服务端版本比较高,则加入到下载列表中。客户端再循环调用下载列表中的文件进行下载更新。

开发环境

.NET Core 3.1

开发工具

 Visual Studio 2019

实现代码

//xml文件
<?xml version="1.0" encoding="utf-8" ?>
<updateList>
  <url>http://localhost:5000/api/Update/</url>
  <files>
    <file name="1.dll" version="1.0"></file>
    <file name="1.dll" version="1.1"></file>
    <file name="AutoUpdate.Test.exe" version="1.1"></file>
  </files>
</updateList>
 //Model
  public class UpdateModel {
        public string name { get; set; }
        public string version { get; set; }
    }

    public class UpdateModel_Out {
        public string url { get; set; }
        public List<UpdateModel> updateList { get; set; }
    }
//控制器
namespace AutoUpdate.WebApi.Controllers {
    [Route("api/[controller]/[Action]")]
    [ApiController]
    public class UpdateController : ControllerBase {

        [HttpGet]
        public JsonResult Index() {
            return new JsonResult(new { code = 10, msg = "success" });
        }

        [HttpPost]
        public JsonResult GetUpdateFiles([FromBody] List<UpdateModel> input) {
            string xmlPath = AppContext.BaseDirectory + "UpdateList.xml";

            XDocument xdoc = XDocument.Load(xmlPath);
            var files = from f in xdoc.Root.Element("files").Elements() select new { name = f.Attribute("name").Value, version = f.Attribute("version").Value };
            var url = xdoc.Root.Element("url").Value;

            List<UpdateModel> updateList = new List<UpdateModel>();
            foreach(var file in files) {

                UpdateModel model = input.Find(s => s.name == file.name);
                if(model == null || file.version.CompareTo(model.version) > 0) {
                    updateList.Add(new UpdateModel {
                        name = file.name,
                        version = file.version
                    });
                }
            }
            UpdateModel_Out output = new UpdateModel_Out {
                url = url,
                updateList = updateList
            };
            return new JsonResult(output);
        }

        [HttpPost]
        public FileStreamResult DownloadFile([FromBody] UpdateModel input) {
            string path = AppContext.BaseDirectory + "files\\" + input.name;
            FileStream fileStream = new FileStream(path, FileMode.Open);
            return new FileStreamResult(fileStream, "application/octet-stream");
        }

    }
}

实现效果

只有服务端其实没什么演示的,这里先看一下更新的效果吧。

代码解析

就只介绍下控制器中的三个方法吧,Index其实没什么用,就是用来做个测试,证明服务是通的;GetUpdateFiles用来比对版本号,获取需要更新的文件(这里用到了Linq To Xml 来解析xml文件,之前文章没写过这个方式,后面再补下);DownloadFile就是用来下载文件的了。

到此这篇关于详解C# WinForm如何实现自动更新程序的文章就介绍到这了,更多相关C# WinForm自动更新程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 秒表计时器以及STOPWATCH(实例讲解)

    秒表计时器以及STOPWATCH(实例讲解)

    下面小编就为大家分享一篇秒表计时器以及STOPWATCH(实例讲解),具有很好的参考价值,希望对大家有所帮助
    2017-11-11
  • C#中String StringBuilder StringBuffer类的用法

    C#中String StringBuilder StringBuffer类的用法

    这篇文章给大家简单介绍下C#中String StringBuilder StringBuffer三个类的用法,需要的的朋友参考下吧
    2017-05-05
  • C#中 const 和 readonly 的不同

    C#中 const 和 readonly 的不同

    const 和 readonly 的区别,总是不太清楚,于是查了查资料。
    2013-04-04
  • C#很简单而又很经典的一句代码实例

    C#很简单而又很经典的一句代码实例

    这篇文章主要给大家分享介绍了关于C#很简单而又很经典的一句代码,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • C#图像处理之边缘检测(Smoothed)的方法

    C#图像处理之边缘检测(Smoothed)的方法

    这篇文章主要介绍了C#图像处理之边缘检测(Smoothed)的方法,使用自定义smoothed算子实现对图像边缘检测的功能,需要的朋友可以参考下
    2015-04-04
  • dotnet如何将文件删除到回收站

    dotnet如何将文件删除到回收站

    这篇文章主要给大家介绍了关于dotnet如何将文件删除到回收站的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用dotnet具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • C#防SQL注入代码的三种方法

    C#防SQL注入代码的三种方法

    这篇文章主要介绍了C#防SQL注入代码的三种方法,有需要的朋友可以参考一下
    2014-01-01
  • C#常用知识点简单回顾(有图有真相)

    C#常用知识点简单回顾(有图有真相)

    C#知识点记录编程的点点滴滴,本文整理了一些(传值调用与引用调用/打印三角形/递归求阶乘/多态性..等等),感兴趣的朋友可以了解下的,不要走开(有图有真相)
    2013-01-01
  • C#实现的AES加密解密完整实例

    C#实现的AES加密解密完整实例

    这篇文章主要介绍了C#实现的AES加密解密,结合完整实例形式分析了C#实现的AES算法进行加密与解密的相关技巧,需要的朋友可以参考下
    2016-07-07
  • C#使用远程服务调用框架Apache Thrift

    C#使用远程服务调用框架Apache Thrift

    这篇文章介绍了C#使用远程服务调用框架Apache Thrift的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06

最新评论