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)

相关推荐

  • VB.NET中子过程和函数怎么用

    技术VB.NET中子过程和函数怎么用小编给大家分享一下VB.NET中子过程和函数怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!VB.NE

    攻略 2021年12月2日
  • 深圳特价旅游1折起,出售特价打折机票1折起?

    技术深圳特价旅游1折起,出售特价打折机票1折起?每日特价机票订票查询电话:400—6004102(网上订票服务) 受理业务:(1)网上机票销售 (2)网上机票预订服务 (3)网上退票服务深圳特价旅游1折起。特价航班票价查

    生活 2021年10月21日
  • 抖音20元1000粉丝网站,刷抖音粉丝的好处有哪些?

    技术抖音20元1000粉丝网站,刷抖音粉丝的好处有哪些?根据小编的了解,现在可以说在全民各行各业各个年龄层都大火的抖音短视频吸粉的速度也是十分快速的,而上面有很多网红粉丝量已经让人眼前一亮,大大惊艳了吃瓜群众。甚至有的普

    测评 2021年10月21日
  • 如何使用variant代替union

    技术如何使用variant代替union如何使用variant代替union,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。union(联合体

    攻略 2021年11月10日
  • ACS与PL/SQL的工作情况分析

    技术ACS与PL/SQL的工作情况分析本篇内容主要讲解“ACS与PL/SQL的工作情况分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ACS与PL/SQL的工作情况分析”吧

    攻略 2021年11月15日
  • 指针的初步学习

    技术指针的初步学习 指针的初步学习1.指针变量计算机将内存分割为字节,字节可以存储八位的信息,而每个字节都有唯一的地址。如下,如果内存中有n个字节,可以把地址看作0到n-1的数地址
    内容0  
    0101

    礼包 2021年11月15日