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

    }


     

  • 相关阅读:
    CentOS 软件安装(yum 和 rpm)
    Ubuntu下的 PPPoE 拨号上网方法
    Vim 去除因为 Unix 和 Windows 换行符不同带来的 ^M 问题
    Python 在 Windows 下安装第三方包,报 Python 未注册的问题解决
    scipy 安装错误及解决
    Python 字典一个易犯的错误
    Linux查看系统信息
    系统更新报错--NO_PUBKEY
    关于直播的技术整理2
    关于直播的技术整理
  • 原文地址:https://www.cnblogs.com/ami/p/455707.html
Copyright © 2011-2022 走看看