• C# 下实现在线升级


    转的,还没有测试

      1//这是一个webservice
      2
      3private AppUpdate.UpdateServ  UpdateSvr;
      4
      5
      6  private void button1_Click(object sender, System.EventArgs e)
      7  {
      8
      9   if(LinkWebServices()==true)
     10   {
     11    this.label1.Text=“连接服务器. PASS“;
     12
     13    if(CheckVer()==true)
     14    {
     15     this.label2.Text=“检查最新版本并下载.PASS“;
     16
     17    }

     18    else
     19    {
     20     this.label2.Text=“检查最新版本并下载.FAIL“;
     21    }

     22   }

     23   else
     24   {
     25    this.label1.Text=“连接服务器.FAIL“;
     26   }

     27  }

     28
     29//这是用来与升级服务器建立连接
     30  private bool LinkWebServices()
     31  {
     32   try
     33   {
     34    UpdateSvr=new UpdateServ();
     35    return true;
     36   }

     37   catch
     38   {
     39    return false;
     40   }

     41  }

     42
     43//调用webservice用来检查是不是有最新的版本
     44  private bool CheckVer()
     45  {
     46   string path =Application.StartupPath;
     47   try
     48   {
     49    VersionCheck(path);
     50    return true;
     51   }

     52   catch(Exception ex)
     53   {
     54    MessageBox.Show(ex.ToString());
     55    return false;
     56   }

     57  }

     58
     59  private void VersionCheck(string desPath)
     60  {
     61   try
     62   {
     63    查看文件和目录
     89
     90
     91    System.Xml.XmlDocument serverXmlDoc = UpdateSvr.AppUpdateVertion();
     92    System.Xml.XmlDocument localXmlDoc = new System.Xml.XmlDocument();
     93    localXmlDoc.Load(desPath + “UpdateConfig.xml“);
     94    bool newVersionExist = false;
     95    bool moduleExist = false;
     96    System.Xml.XmlNode serverNode0 = serverXmlDoc.ChildNodes[0];
     97    System.Xml.XmlNode localNode0 = localXmlDoc.ChildNodes[0];
     98    foreach(System.Xml.XmlNode serverNode in serverNode0)
     99    {
    100     moduleExist = false;
    101     foreach(System.Xml.XmlNode localNode in localNode0)
    102     {
    103      //找到对应模块
    104      if(localNode.ChildNodes[0].InnerText == serverNode.ChildNodes[0].InnerText)
    105      {
    106       moduleExist = true;
    107       //版本号判断
    108       if(localNode.ChildNodes[1].InnerText.CompareTo(serverNode.ChildNodes[1].InnerText) 〈 0)
    109       {
    110        newVersionExist = true;
    111        if(System.Configuration.ConfigurationSettings.AppSettings[“NetStyle“].ToString()==“internet“)
    112        {
    113         DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
    114        }

    115        else
    116        {
    117         DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
    118        }

    119       }

    120       break;
    121      }

    122     }

    123     //没找到对应模块
    124     if(false == moduleExist)
    125     {
    126
    127      if(System.Configuration.ConfigurationSettings.AppSettings[“NetStyle“].ToString()==“internet“)
    128      {
    129       DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
    130      }

    131      else
    132      {
    133       DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
    134      }

    135     }

    136    }

    137    //写入新UpdateConfig.xml升级完毕后替换
    138    if(newVersionExist)
    139    {
    140     serverXmlDoc.Save(tempPath + “UpdateConfig.xml“);
    141     if(DialogResult.Yes == MessageBox.Show(“有新版本,是否更新?“,“提示“,MessageBoxButtons.YesNo))
    142     {
    143      string[] dirs = System.IO.Directory.GetFiles(tempPath, “*.*“);
    144      string fileName;
    145      foreach (string dir in dirs)
    146      {
    147       fileName = ((dir.Split(Convert.ToChar(@“\“)))[dir.Split(Convert.ToChar(@“\“)).Length - 1]);
    148       if(System.IO.File.Exists(desPath + fileName))
    149       {
    150        //TODO:可以支持备份以前版本
    151        System.IO.File.Delete(desPath + fileName);
    152       }

    153       //TODO:如果系统正在运行,您得停止系统,至于如何停止,也许可以使用System.Diagnostics.Process
    154       System.IO.File.Move(dir,desPath + fileName);
    155      }

    156      MessageBox.Show(“升级完毕“);
    157     }

    158     else
    159     {
    160      //TODO:可以支持重新提示升级
    161     }

    162    }

    163   }

    164   catch(Exception ex)
    165   {
    166    throw new Exception(“升级失败,原因是:“ + ex.Message,ex);
    167   }

    168  }

    169
    170//下载最新的文件
    171
    172  private void DownloadFile(string source,string fileName)
    173  {
    174   try
    175   {
    176    System.Net.WebClient myWebClient = new System.Net.WebClient();
    177    myWebClient.DownloadFile(source,fileName);
    178   }

    179   catch(Exception ex)
    180   {
    181    throw new Exception(“下载失败,原因是:“ + ex.Message,ex);
    182   }

    183  }

    184
    185该文章转载自网络大本营:http://www.xrss.cn/Dev/DotNet/200722310638.Html
  • 相关阅读:
    九、springboot整合RabbitMq 用死信队列做延迟队列
    八、RabbitMq死信队列与延迟队列
    七、RabbitMq交换机
    六、RabbitMq 发布确认模式(confirm模式)
    五、RabbitMq的消息应答机制
    四、RabbitMq的工作模式( Work Queues)
    三、RabbitMq简单模式(hello world)
    qt 使用属性设置替换样式,为无setstylesheet接口的的action设置样式
    SpringBoot配置国际化
    基于策略模式的前端表单设计
  • 原文地址:https://www.cnblogs.com/Sabre/p/1195806.html
Copyright © 2020-2023  润新知