c#自动更新-源码

软件维护与升级

  • 修复漏洞和缺陷:软件在使用过程中可能会发现各种漏洞和缺陷,自动更新可以及时推送修复程序,增强软件的稳定性和安全性,避免因漏洞被利用而导致数据泄露、系统崩溃等问题。

  • 提升性能:通过自动更新,可以对软件的算法、代码逻辑等进行优化,提高软件的运行效率,减少资源占用,让软件运行得更加流畅。

  • 添加新功能:随着业务的发展和用户需求的变化,软件需要不断添加新功能来满足用户。自动更新能够方便地将新功能推送给用户,无需用户手动下载和安装新版本,提升用户体验。

    ///


    /// 检测更新
    ///

    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();
        }
相关推荐
YuSun_WK37 分钟前
程序&进程&多任务&线程
linux·运维·服务器
HeLLo_a1192 小时前
第11章 安全网络架构和组件(一)
linux·服务器·网络
薯条不要番茄酱2 小时前
【网络原理】从零开始深入理解HTTP的报文格式(一)
网络·网络协议·http
南川琼语2 小时前
TCP概念+模拟tcp服务器及客户端
linux·服务器·网络·tcp/ip
智联视频超融合平台3 小时前
慧港口新纪元:视频监控联网平台赋能高效安全运营
网络·网络协议·音视频·实时音视频·视频编解码
潘yi.6 小时前
web技术与nginx网站环境部署
服务器·网络·nginx
安顾里7 小时前
Linux命令-iostat
linux·运维·服务器
浅陌sss7 小时前
C#中实现XML解析器
xml·c#
whoarethenext7 小时前
初始https附带c/c++源码使用curl库调用
服务器·c++·qt·https·curl
100编程朱老师7 小时前
面试:什么叫Linux多路复用 ?
linux·运维·服务器