最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C# WinForm如何實現(xiàn)自動更新程序

 更新時間:2022年10月13日 15:52:03   作者:Csharp小記  
在C/S這種模式中,自動更新程序就顯得尤為重要,它不像B/S模式,直接發(fā)布到服務(wù)器上,瀏覽器點個刷新就可以了。本文就為大家準(zhǔn)備了WinForm實現(xiàn)自動更新程序的示例代碼,需要的可以參考一下

前言

在C/S這種模式中,自動更新程序就顯得尤為重要,它不像B/S模式,直接發(fā)布到服務(wù)器上,瀏覽器點個刷新就可以了。由于涉及到客戶端文件,所以必然需要把相應(yīng)的文件下載下來。這個其實比較常見,我們常用的微信、QQ等,也都是這個操作。

自動更新程序也分為客戶端和服務(wù)端兩部分,客戶端就是用來下載的一個小程序,服務(wù)端就是供客戶端調(diào)用下載接口等操作。

這里第一步先將服務(wù)端代碼寫出來,邏輯比較簡單,使用xml文件分別存儲各個文件的名稱以及版本號(每次需要更新的時候,將需要更新的文件上傳到服務(wù)器后,同步增加一下xml文件中對應(yīng)的版本號)。然后比對客戶端傳進來的文件版本,若服務(wù)端版本比較高,則加入到下載列表中。客戶端再循環(huán)調(diào)用下載列表中的文件進行下載更新。

開發(fā)環(huán)境

.NET Core 3.1

開發(fā)工具

 Visual Studio 2019

實現(xiàn)代碼

//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");
        }

    }
}

實現(xiàn)效果

只有服務(wù)端其實沒什么演示的,這里先看一下更新的效果吧。

代碼解析

就只介紹下控制器中的三個方法吧,Index其實沒什么用,就是用來做個測試,證明服務(wù)是通的;GetUpdateFiles用來比對版本號,獲取需要更新的文件(這里用到了Linq To Xml 來解析xml文件,之前文章沒寫過這個方式,后面再補下);DownloadFile就是用來下載文件的了。

到此這篇關(guān)于詳解C# WinForm如何實現(xiàn)自動更新程序的文章就介紹到這了,更多相關(guān)C# WinForm自動更新程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

黄大仙区| 忻城县| 泸西县| 新余市| 静海县| 福安市| 资源县| 合川市| 龙胜| 潞城市| 井研县| 陵川县| 西青区| 科技| 板桥市| 嘉义县| 错那县| 大姚县| 荔浦县| 应城市| 青河县| 社会| 方正县| 屏东县| 普格县| 于都县| 桃园市| 江陵县| 会昌县| 广河县| 麻栗坡县| 西峡县| 三明市| 聂拉木县| 施秉县| 甘泉县| 突泉县| 重庆市| 芮城县| 榕江县| 黄陵县|