当前位置: 首页 > news >正文

c#自动更新-源码

软件维护与升级

  • 修复漏洞和缺陷:软件在使用过程中可能会发现各种漏洞和缺陷,自动更新可以及时推送修复程序,增强软件的稳定性和安全性,避免因漏洞被利用而导致数据泄露、系统崩溃等问题。
  • 提升性能:通过自动更新,可以对软件的算法、代码逻辑等进行优化,提高软件的运行效率,减少资源占用,让软件运行得更加流畅。
  • 添加新功能:随着业务的发展和用户需求的变化,软件需要不断添加新功能来满足用户。自动更新能够方便地将新功能推送给用户,无需用户手动下载和安装新版本,提升用户体验。
 /// <summary>
        /// 检测更新
        /// </summary>
        private void checkUpdate()
        {

            strUpdateURL = getConfigValue(strUpdateXmlPath, "Url");     //读取本地xml中配置的更新服务器的URL
            string strLastUpdateDate = getConfigValue(strUpdateXmlPath, "UpDate");   //读取本地xml中配置的最近一次更新日期

            if (strUpdateURL.Substring(strUpdateURL.Length - 1) != "/")       //如果配置的xml中URL没带最后一个反斜杠,则加一下,防止出错
                strUpdateURL += "/";

            strTheUpdateDate = getTheLastUpdateTime(strUpdateURL);        //获得更新服务器端的此次更新日期
            if (!String.IsNullOrEmpty(strTheUpdateDate) && !String.IsNullOrEmpty(strLastUpdateDate))      //日期都不为空
            {
                if (DateTime.Compare(
                    Convert.ToDateTime(strTheUpdateDate, CultureInfo.InvariantCulture),
                    Convert.ToDateTime(strLastUpdateDate, CultureInfo.InvariantCulture)) > 0)     //字符转日期,并比较日期大小
                {
                    //本次更新日期 大于 最近一次更新日期,开始更新
                    try
                    {
                        if (new K3SP.lib.ClassCheckProIsRun().checkProcess(strUpdaterProFileName, strUpdaterProPath))
                        {
                            classMsg.messageInfoBox("更新程序" + strUpdaterProFileName + "已打开!");
                        }
                        else
                        {
                            Process.Start(strUpdaterProPath);
                        }
                    }
                    catch (Win32Exception ex)
                    {
                        classMsg.messageInfoBox(ex.Message);      //主程序未更新成功或者被误删掉,再更新一遍
                    }
                    Application.Exit();         //退出主程序
                }
            }
        }

        /// <summary> 
        /// 读取本地update.xml 
        /// </summary> 
        /// <param name="path">update.xml文件的路径</param> 
        /// <param name="appKey">"key"的值</param> 
        /// <returns>返回"value"的值</returns> 
        internal static string getConfigValue(string path, string appKey)
        {
            XmlDocument xDoc = new XmlDocument();
            XmlNode xNode;
            XmlElement xElem = null;
            try
            {
                xDoc.Load(path);

                xNode = xDoc.SelectSingleNode("//appSettings");

                xElem = (XmlElement)xNode.SelectSingleNode("//add[@key=\"" + appKey + "\"]");

            }
            catch (XmlException ex)
            {
                classMsg.messageInfoBox(ex.Message);
            }
            if (xElem != null)
                return xElem.GetAttribute("value");
            else
                return "";
        }

        /// <summary> 
        /// 获取服务器端软件的更新日期 
        /// </summary> 
        /// <param name="Dir">服务器地址</param>
        /// <returns>返回日期</returns> 
        private static string getTheLastUpdateTime(string Dir)
        {
            string LastUpdateTime = "";
            string AutoUpdaterFileName = Dir + strUpdateListXmlPath;
            try
            {
                WebClient wc = new WebClient();
                Stream sm = wc.OpenRead(AutoUpdaterFileName);
                XmlTextReader xml = new XmlTextReader(sm);
                while (xml.Read())
                {
                    if (xml.Name == "UpdateTime")
                    {
                        LastUpdateTime = xml.GetAttribute("Date");
                        break;
                    }
                }
                xml.Close();
                sm.Close();
            }
            catch (WebException ex)
            {
                classMsg.messageInfoBox(ex.Message);
            }
            return LastUpdateTime;
        }
    }

 变量信息

        /// <summary>
        /// 全局变量,用于存储更新服务器的URL
        /// </summary>
        private static string strUpdateURL;

        /// <summary>
        /// 本地update.xml的路径
        /// </summary>
        private static string strUpdateXmlPath = Application.StartupPath + @"\update\conf\update.xml";

        /// <summary>
        /// 服务端updatelist.xml的URL地址 
        /// </summary>
        private static string strUpdateListXmlPath = "UpdateServer/UpdateList.xml";

        /// <summary>
        /// 全局变量,用于存储服务端updatelist.xml的更新日期 
        /// </summary>
        private static string strTheUpdateDate;

        /// <summary>
        /// 更新程序的文件名
        /// </summary>
        private static string strUpdaterProFileName = "AutoUpdater";

        /// <summary>
        /// 更新程序的路径
        /// </summary>
        private static string strUpdaterProPath = Application.StartupPath + @"\update\AutoUpdater.exe";

程序启动


        private void FormLogin_Load(object sender, EventArgs e)
        {
            checkUpdate();  //检测更新
        }

        /// <summary>
        /// 进入程序
        /// </summary>
        private void button_Login_Click(object sender, EventArgs e)
        {
            FormMain form_Main = new FormMain();
            form_Main.Show();
            this.Hide();
        }

http://www.dtcms.com/a/20116.html

相关文章:

  • WPF的Prism框架的使用
  • 算法刷题-链表系列-两两交换链表结点、删除链表的倒数第n个元素
  • C#打印设计器
  • 72.git指南(简单)
  • SpringCloud系列教程:微服务的未来 (五)枚举处理器、JSON处理器、分页插件实现
  • DeepSeek24小时写作机器人,持续创作高质量文案
  • pnpm的使用
  • Python 字典思维导图
  • 制药行业 BI 可视化数据分析方案
  • dedecms 开放重定向漏洞(附脚本)(CVE-2024-57241)
  • Docker学习
  • dma_ddr 的编写 通过mig控制ddr3
  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 13
  • 掌握SQL多表连接查询_轻松处理复杂数据关系
  • [0689].第04节:Kafka与第三方的集成 – Kafka集成SpringBoot
  • 《Spring实战》(第6版)第1章 Spring起步
  • 【数据结构】(9) 优先级队列(堆)
  • floodfill算法系列一>太平洋大西洋水流问题
  • 【第3章:卷积神经网络(CNN)——3.6 CNN的高级特性与优化策略】
  • 如何使用 DeepSeek 和 Dexscreener 构建免费的 AI 加密交易机器人?
  • EasyExcel 复杂填充
  • DeepSeek接入网络安全领域,AI高效驱动,重新定义网络防御边界!
  • UniApp 中制作一个横向滚动工具栏
  • MyBatis:动态SQL高级标签使用方法指南
  • 数据管理的四大基石:通俗解读数据中台、数据仓库、数据治理和主数据
  • 《千多桃花一世开》:南胥月为何爱暮悬铃
  • 输电杆塔沉降智能监测系统:如何用数据守护电网安全
  • ASP.NET Core SixLabors.ImageSharp v1.0 的图像实用程序类 web示例
  • uniapp可视化-活动报名表单系统-代码生成器
  • 【云安全】云原生- K8S kubeconfig 文件泄露