程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用C#實現在線升級

用C#實現在線升級

編輯:關於C語言

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved