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

  }


posted @ 2008-05-28 22:33  superfang  阅读(584)  评论(0编辑  收藏  举报