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)

相关推荐

  • 犹抱琵琶半遮面的寓意,“犹抱琵琶半遮面”是什么意思

    技术犹抱琵琶半遮面的寓意,“犹抱琵琶半遮面”是什么意思意思:怀里还抱着琵琶半遮着脸面。 出处:《琵琶行 / 琵琶引》 节选: 寻声暗问弹者谁犹抱琵琶半遮面的寓意?琵琶声停欲语迟。移船相近邀相见,添酒回灯重开宴。 千呼万唤

    生活 2021年10月28日
  • web前端怎么更好的展示后端返回的十万条数据

    技术web前端怎么更好的展示后端返回的十万条数据本篇内容主要讲解“web前端怎么更好的展示后端返回的十万条数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web前端怎么更好

    攻略 2021年11月25日
  • Centos8 下部署 ASP.net Core 程序

    技术Centos8 下部署 ASP.net Core 程序 Centos8 下部署 ASP.net Core 程序1、安装需要的SDK包,如果程序包含3.1版本,需要安装3.1的SDK。
    sudo dn

    礼包 2021年12月1日
  • css3消除锯齿的属性怎么使用(设置消除锯齿方法)

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

    攻略 2021年12月15日
  • 如何解决Spring Cloud Gateway和OAuth2不兼容的问题

    技术如何解决Spring Cloud Gateway和OAuth2不兼容的问题今天就跟大家聊聊有关如何解决Spring Cloud Gateway和OAuth2不兼容的问题,可能很多人都不太了解,为了让大家更加了解,小编

    攻略 2021年10月22日
  • ps怎么添加笔刷,ps字体和笔刷怎么安装

    技术ps怎么添加笔刷,ps字体和笔刷怎么安装1下载的字体如何安装到PS里ps怎么添加笔刷?首先,打开我的电脑——控制面板——外观和主题——字体(或者找C:\WINDOWS\Fonts)然后,打开下载的解压包(确认你的电脑

    生活 2021年10月20日