ibcadmin 发表于 2016-8-26 09:41:14

C#程序在线升级代码

此代码仅供参考!

//这是一个webservice

private AppUpdate.UpdateServUpdateSvr;


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;
    System.Xml.XmlNode localNode0 = localXmlDoc.ChildNodes;
    foreach(System.Xml.XmlNode serverNode in serverNode0)
    {
   moduleExist = false;
   foreach(System.Xml.XmlNode localNode in localNode0)
   {
      //找到对应模块
      if(localNode.ChildNodes.InnerText == serverNode.ChildNodes.InnerText)
      {
       moduleExist = true;
       //版本号判断
       if(localNode.ChildNodes.InnerText.CompareTo(serverNode.ChildNodes.InnerText) < 0)
       {
      newVersionExist = true;
      if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")
      {
         DownloadFile(serverNode.ChildNodes.InnerText,tempPath + serverNode.ChildNodes.InnerText);
      }
      else
      {
         DownloadFile(serverNode.ChildNodes.InnerText,tempPath + serverNode.ChildNodes.InnerText);
      }
       }
       break;
      }
   }
   //没找到对应模块
   if(false == moduleExist)
   {
      
      if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")
      {
       DownloadFile(serverNode.ChildNodes.InnerText,tempPath + serverNode.ChildNodes.InnerText);
      }
      else
      {
       DownloadFile(serverNode.ChildNodes.InnerText,tempPath + serverNode.ChildNodes.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(@"\"))));
       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);
   }
}


ibcadmin 发表于 2016-8-26 09:43:04

111

即墨还雀 发表于 2016-8-26 09:43:31

hao de

Amy尾巴 发表于 2016-8-26 09:46:31

忙忙忙、、、、、

wibc 发表于 2016-10-27 22:56:06

学习了,灰常感谢!
页: [1]
查看完整版本: C#程序在线升级代码