zoukankan      html  css  js  c++  java
  • 用C#实现在线升级


    //这是一个webservice

    private AppUpdate.UpdateServ  UpdateSvr;


      private void button1_Click(object sender, System.EventArgs e)
      {
       
       if(LinkWebServices()==true)
       {
        this.label1.Text="连接服务器....... PASS";
       
        if(CheckVer()==true)
        {
         this.label2.Text="检查最新版本并下载.......PASS";
                      
        }
        else
        {
         this.label2.Text="检查最新版本并下载.......FAIL";
        }
       }
       else
       {
        this.label1.Text="连接服务器.......FAIL";
       }
      }

    //这是用来与升级服务器建立连接
      private bool LinkWebServices()
      {
       try
       {
        UpdateSvr=new UpdateServ();
        return true;
       }
       catch
       {
        return false;
       }
      }

    //调用webservice用来检查是不是有最新的版本
      private bool CheckVer()
      {
       string path =Application.StartupPath;
       try
       {
        VersionCheck(path);
        return true;
       }
       catch(Exception ex)
       {
        MessageBox.Show(ex.ToString());
        return false;
       }
      }

      private void VersionCheck(string desPath)
      {
       try
       {
        #region 查看文件和目录
        if(!desPath.EndsWith(@"\"))
         desPath += @"\";

        if(!System.IO.Directory.Exists(desPath))
        {
         System.IO.Directory.CreateDirectory(desPath);
        }

        string tempPath = desPath + @"tempDesPathCache\";

        if(System.IO.Directory.Exists(tempPath))
        {
         System.IO.Directory.Delete(tempPath,true);
         System.IO.Directory.CreateDirectory(tempPath);
        }
        else
         System.IO.Directory.CreateDirectory(tempPath);

        if(!System.IO.File.Exists(desPath + "UpdateConfig.xml"))
        {
         System.Xml.XmlDocument updateConfig = new System.Xml.XmlDocument();
         updateConfig.LoadXml(@"<root></root>");
         updateConfig.Save(desPath + "UpdateConfig.xml");
        }
        #endregion

      
        System.Xml.XmlDocument serverXmlDoc = UpdateSvr.AppUpdateVertion();
        System.Xml.XmlDocument localXmlDoc = new System.Xml.XmlDocument();
        localXmlDoc.Load(desPath + "UpdateConfig.xml");
        bool newVersionExist = false;
        bool moduleExist = false;
        System.Xml.XmlNode serverNode0 = serverXmlDoc.ChildNodes[0];
        System.Xml.XmlNode localNode0 = localXmlDoc.ChildNodes[0];
        foreach(System.Xml.XmlNode serverNode in serverNode0)
        {
         moduleExist = false;
         foreach(System.Xml.XmlNode localNode in localNode0)
         {
          //找到对应模块
          if(localNode.ChildNodes[0].InnerText == serverNode.ChildNodes[0].InnerText)
          {
           moduleExist = true;
           //版本号判断
           if(localNode.ChildNodes[1].InnerText.CompareTo(serverNode.ChildNodes[1].InnerText) < 0)
           {
            newVersionExist = true;
            if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")
            {
             DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
            }
            else
            {
             DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
            }
           }
           break;
          }
         }
         //没找到对应模块
         if(false == moduleExist)
         {
         
          if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")
          {
           DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
          }
          else
          {
           DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
          }
         }
        }
        //写入新UpdateConfig.xml升级完毕后替换
        if(newVersionExist)
        {
         serverXmlDoc.Save(tempPath + "UpdateConfig.xml");
         if(DialogResult.Yes == MessageBox.Show("有新版本,是否更新?","提示",MessageBoxButtons.YesNo))
         {
          string[] dirs = System.IO.Directory.GetFiles(tempPath, "*.*");
          string fileName;
          foreach (string dir in dirs)
          {
           fileName = ((dir.Split(Convert.ToChar(@"\")))[dir.Split(Convert.ToChar(@"\")).Length - 1]);
           if(System.IO.File.Exists(desPath + fileName))
           {
            //TODO:可以支持备份以前版本
            System.IO.File.Delete(desPath + fileName);
           }
           //TODO:如果系统正在运行,您得停止系统,至于如何停止,也许可以使用System.Diagnostics.Process
           System.IO.File.Move(dir,desPath + fileName);
          }
          MessageBox.Show("升级完毕");
         }
         else
         {
          //TODO:可以支持重新提示升级
         }
        }
       }
       catch(Exception ex)
       {
        throw new Exception("升级失败,原因是:" + ex.Message,ex);
       }
      }

    //下载最新的文件

      private void DownloadFile(string source,string fileName)
      {
       try
       {
        System.Net.WebClient myWebClient = new System.Net.WebClient();
        myWebClient.DownloadFile(source,fileName);
       }
       catch(Exception ex)
       {
        throw new Exception("下载失败,原因是:" + ex.Message,ex);
       }
      }

  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/tuyile006/p/395943.html
Copyright © 2011-2022 走看看