//这是一个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
    {
     .WebClient myWebClient = new .WebClient();
     myWebClient.DownloadFile(source,fileName);
    }
    catch(Exception ex)
    {
     throw new Exception("下载失败,原因是:" + ex.Message,ex);
    }
   }C#下实现在线升级
原创
             ©著作权归作者所有:来自51CTO博客作者biyusr216的原创作品,请联系作者获取转载授权,否则将追究法律责任        
             
            
        
                提问和评论都可以,用心的回复会被更多人看到
                评论
            
            
                    发布评论
                
            
            相关文章
        
        - 
                    Java使用OpenOffice实现在线预览使用OpenOffice实现在线预览 System java 文件路径
- 
                    C#程序在线升级代码---webservice前言:由于项目原因,要实施的客户离作者太远,考 WebService C# C++ C 软件测试
 
 
                    













 
                    

 
                 
                    