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
    {
    查看文件和目录


    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);
    }

    }


     

  • 相关阅读:
    IOC和工厂模式联合使用简化工厂模式
    免安装解压版mysql瘦身
    MYPM 国产非开源免费测试管理工具软件 WEB2.0用户体验零配置安装版本发布
    巧用Junit 静态变量
    动态加载JS和CSS
    浅谈测试管理工具对新人的潜移默化
    Pidgin——我用的环保QQ版本。无需安装解压即可运行。送上我本人写的菜鸟教材。
    我有一个梦想:WM手机商城创意。有初步的整体结构设计包括软硬件、服务器、客户端
    Form.close与Application.Exit()的区别
    ASP.NET 使用CustomValidator调用js函数动态修改验证TextBox的正则表达式,无刷新
  • 原文地址:https://www.cnblogs.com/ami/p/455707.html
Copyright © 2011-2022 走看看