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();
        }
相关推荐
zzzsde13 小时前
【Linux】初识Linux
linux·运维·服务器
fouryears_2341713 小时前
云服务器使用代理稳定与github通信方法
运维·服务器·github
渡我白衣13 小时前
Linux网络:应用层协议http
linux·网络·http
pofenx14 小时前
使用nps创建隧道,进行内网穿透
linux·网络·内网穿透·nps
Ronin30514 小时前
【Linux系统】单例式线程池
linux·服务器·单例模式·线程池·线程安全·死锁
csdn_aspnet14 小时前
MongoDB C# .NetCore 驱动程序 序列化忽略属性
mongodb·c#·.netcore
wanhengidc14 小时前
手机云服务是什么意思?
运维·网络·安全·游戏·智能手机
浪扼飞舟14 小时前
c#基础二(类和对象,构造器调用顺序、访问级别、重写和多态、抽象类和接口)
java·开发语言·c#
GilgameshJSS14 小时前
【学习K230-例程19】GT6700-TCP-Client
网络·python·网络协议·学习·tcp/ip
Dovis(誓平步青云)15 小时前
《Linux 基础指令实战:新手入门的命令行操作核心教程(第一篇)》
linux·运维·服务器