首页 > 代码库 > C#制作在线升级程序

C#制作在线升级程序

//这是一个webserviceprivate 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);   }  }