C#如何实现Winform自动升级程序

技术C#如何实现Winform自动升级程序这篇文章给大家分享的是有关C#如何实现Winform自动升级程序的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。开发第三方工具包新建一个WinForm项

本文讲述的是C#如何实现Winform的自动升级程序。我觉得边肖很实用,就和大家分享一下作为参考。让我们跟着边肖看一看。

探索

第三方工具包

创建一个名为SumUpdater的新WinForm项目。下图显示了整个项目的目录。

C#如何实现Winform自动升级程序

在升级程序中,我们需要检查版本信息对比。我在后台使用TXT文件中的JSON数据,下载后需要解压ZIP文件,所以需要参考第三方程序Newtonsoft。Json和DotNetZip .

在引用中用鼠标左键选择管理NuGet包。

C#如何实现Winform自动升级程序

搜索牛顿英尺。用于安装的Json和DotNetZip。

C#如何实现Winform自动升级程序

主接口

将主窗体重命名为MainForm.cs,然后向界面添加两个控件,一个标签和一个progressbar。

C#如何实现Winform自动升级程序

然后重写主窗口的构造函数。

公共主窗体(字符串服务器IP,int服务器端口,string _callBackExeName,字符串标题,int oldversioncode)

增加了五个参数:服务器的IP地址、端口号、升级后要运行的程序名称、标题信息和当前版本号。

app.config

在本地配置文件中添加几个项目来设置服务器的IP地址、端口号、升级完成后要调用的EXE程序以及当前版本号。

C#如何实现Winform自动升级程序

然后添加参数读取Program.cs启动项中的信息,然后传递给主窗体。

静态空主()

{

尝试

{

申请。enablevisualstyle();

申请。setcompatiblextrenderingdefault(false);

string ServerIP=configuration manager。AppSettings[' ServerIP '];

int serverPort=int。解析(配置管理器。AppSettings[' ServerPort ']);

nbsp;          string callBackExeName = ConfigurationManager.AppSettings["CallbackExeName"];
                string title = ConfigurationManager.AppSettings["Title"];
                int VersionCode = int.Parse(ConfigurationManager.AppSettings ["Version"]);

                MainForm form = new MainForm(serverIP, serverPort, callBackExeName, title, VersionCode);

                Application.Run(form);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

C#如何实现Winform自动升级程序

检测并下载更新 Updater.cs

与服务器的网络通讯我们用的是WebClient方式

这个类里主要的两个方法GetUpdaterInfo()和DownLoadUpGrade(string url)

       /// <summary>
        /// 检测升级信息
        /// </summary>
        /// <param name="geturl"></param>
        /// <param name="downurl"></param>
        /// <returns></returns>
        public void GetUpdaterInfo()
        {
            info = new CUpdInfo();
          
            _client = new WebClient();

           //获取检测升级的字符串  _checkurl为地址

            string json = _client.DownloadString(_checkurl);

           //序列化json

            info = SerializationHelper.Deserialize<CUpdInfo>(json, 0);
            //判断服务器上的版本号如果大于本地版本号,执行DownLoadUpGrade(),参数是info.appdownloadurl下载地址

           if (info.versionCode > _oldversioncode)
            {
                DownLoadUpGrade(info.appdownloadurl);
            }
            else
            {
                _lbltext.Text = "当前为最新版本,无需升级!";
                //等待500毫秒后直接启动原程序
                Thread.Sleep(1500);
                UpdaterOver.StartApp(_appFileName);
            }

      }

        /// <summary>
        /// 下载升级文件
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public void DownLoadUpGrade(string url)
        {
            _client = new WebClient();
            if (_client.IsBusy)
            {
                _client.CancelAsync();
            }
            _client.DownloadProgressChanged +=
                new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
            _client.DownloadFileCompleted += new AsyncCompletedEventHandler(webClient_DownloadFileCompleted);

            //开始下载
            _client.DownloadFileAsync(new Uri(url), _downfilename);
        }

        /// <summary>
        /// 下载进度条
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            _progressBar.Value = e.ProgressPercentage;
            _lbltext.Text = $"正在下载文件,完成进度{e.BytesReceived}/{e.TotalBytesToReceive}";
        }

        /// <summary>
        /// 下载完成后的事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void webClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                _lbltext.Text = "下载被取消!";
            }
            else
            {
                _lbltext.Text = "下载完成!";
                try
                {
                    Thread.Sleep(1000);
                    UpdaterOver.StartOver(_downfilename, _appDirPath, info.versionCode, _appFileName);
                }
                catch (Exception ex)
                {
                    _lbltext.Text = ex.Message;
                }
            }
        }

下载完成 UpdaterOver.cs

        /// <summary>
        ///
        /// </summary>
        /// <param name="zipfile"></param>
        /// <param name="destpath"></param>
        public static void StartOver(string zipfile, string destpath, int versioncode, string appfile)
        {
            //解压文件到指定目录
            ZipHelper.ZipHelper.UnZipFile(zipfile, destpath, true);
            //成功后修改本地版本信息
            UpdateVersion(versioncode);
            //重新启动源程序
            if (appfile != "")
            {
                StartApp(appfile);
            }
        }

下载完后的事件,首先解压ZIP替换文件

然后修改本地的版本号信息

最后再重新启动原程序

感谢各位的阅读!关于“C#如何实现Winform自动升级程序”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/128600.html

(0)

相关推荐

  • PHP+jQuery-ui怎么进行拖动浮动层排序并保存到数据库

    技术PHP+jQuery-ui怎么进行拖动浮动层排序并保存到数据库这篇文章将为大家详细讲解有关PHP+jQuery-ui怎么进行拖动浮动层排序并保存到数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这

    攻略 2021年11月16日
  • 220v50hz一小时多少电,220v50HZ多大功率

    技术220v50hz一小时多少电,220v50HZ多大功率光看电压和频率是无法看出功率的220v50hz一小时多少电。电功率= 电压×电流。 220v50Hz是市电电压以及频率,功率的单位是瓦或者千瓦,功率=电压×电流,

    生活 2021年10月20日
  • JAVA怎么读取文本文件内容

    技术JAVA怎么读取文本文件内容本篇内容介绍了“JAVA怎么读取文本文件内容”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成

    攻略 2021年11月19日
  • 前端面试手写代码——JS数组去重

    技术前端面试手写代码——JS数组去重 前端面试手写代码——JS数组去重JavaScript 数组去重类型总结,4大类型,8种基础写法1 测试用例
    // 测试用例
    const a = {};
    const

    礼包 2021年10月19日
  • 家中养什么花好,室内适合养哪种带香味的植物

    技术家中养什么花好,室内适合养哪种带香味的植物阳台花园菜园为您解答家中养什么花好。室内适合栽种哪些有香味的植物?在家里养些花花草草,调节气氛,是一件非常有雅兴的事。如果养护的花卉长势旺盛,开花繁多而又自带香气,可以为家里

    生活 2021年10月21日
  • Hive数据倾斜的示例分析

    技术Hive数据倾斜的示例分析这篇文章将为大家详细讲解有关Hive数据倾斜的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、离线数据的主要挑战:“数据倾斜”首先介绍 “数据倾

    攻略 2021年12月10日