分类

链接

2011 年 6 月
 12345
6789101112
13141516171819
20212223242526
27282930  

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > .NET > 正文
共享办公室出租
C#实现程序的版本升级更新
.NET 暂无评论 阅读(1,965)
  1. C#实现程序的版本升级更新 收藏    我们做了程序,不免会有版本升级,这就需要程序有自动版本升级的功能。
  2. 那么看看我是如何实现程序自动更新的。
  3. 直接上代码:
  4. using System;   
  5. using System.Collections.Generic;   
  6. using System.Text;   
  7. using System.Reflection;   
  8. using System.IO;   
  9. using System.Net;   
  10. using System.Xml;   
  11.   
  12. namespace Update   
  13. {   
  14.     /// <summary>   
  15.     /// 更新完成触发的事件   
  16.     /// </summary>   
  17.     public delegate void UpdateState();   
  18.     /// <summary>   
  19.     /// 程序更新   
  20.     /// </summary>   
  21.     public class SoftUpdate   
  22.     {   
  23.   
  24.         private string download;   
  25.         private const string updateUrl = "http://www.csdn.net/update.xml";//升级配置的XML文件地址  
  26.  
  27.         #region 构造函数   
  28.         public SoftUpdate() { }   
  29.   
  30.         /// <summary>   
  31.         /// 程序更新   
  32.         /// </summary>   
  33.         /// <param name="file">要更新的文件</param>   
  34.         public SoftUpdate(string file,string softName) {   
  35.             this.LoadFile = file;   
  36.             this.SoftName = softName;   
  37.         }   
  38.         #endregion  
  39.  
  40.         #region 属性   
  41.         private string loadFile;   
  42.         private string newVerson;   
  43.         private string softName;   
  44.         private bool isUpdate;   
  45.   
  46.         /// <summary>   
  47.         /// 或取是否需要更新   
  48.         /// </summary>   
  49.         public bool IsUpdate   
  50.         {   
  51.             get    
  52.             {   
  53.                 checkUpdate();   
  54.                 return isUpdate;    
  55.             }   
  56.         }   
  57.   
  58.         /// <summary>   
  59.         /// 要检查更新的文件   
  60.         /// </summary>   
  61.         public string LoadFile   
  62.         {   
  63.             get { return loadFile; }   
  64.             set { loadFile = value; }   
  65.         }   
  66.   
  67.         /// <summary>   
  68.         /// 程序集新版本   
  69.         /// </summary>   
  70.         public string NewVerson   
  71.         {   
  72.             get { return newVerson; }   
  73.         }   
  74.   
  75.         /// <summary>   
  76.         /// 升级的名称   
  77.         /// </summary>   
  78.         public string SoftName   
  79.         {   
  80.             get { return softName; }   
  81.             set { softName = value; }   
  82.         }  
  83.  
  84.         #endregion   
  85.   
  86.         /// <summary>   
  87.         /// 更新完成时触发的事件   
  88.         /// </summary>   
  89.         public event UpdateState UpdateFinish;   
  90.         private void isFinish() {   
  91.             if(UpdateFinish != null)   
  92.                 UpdateFinish();   
  93.         }   
  94.   
  95.         /// <summary>   
  96.         /// 下载更新   
  97.         /// </summary>   
  98.         public void Update()   
  99.         {   
  100.             try  
  101.             {   
  102.                 if (!isUpdate)   
  103.                     return;   
  104.                 WebClient wc = new WebClient();   
  105.                 string filename = "";   
  106.                 string exten = download.Substring(download.LastIndexOf("."));   
  107.                 if (loadFile.IndexOf(@"\") == -1)   
  108.                     filename = "Update_" + Path.GetFileNameWithoutExtension(loadFile) + exten;   
  109.                 else  
  110.                     filename = Path.GetDirectoryName(loadFile) + "\\Update_" + Path.GetFileNameWithoutExtension(loadFile) + exten;   
  111.                 wc.DownloadFile(download, filename);   
  112.                 wc.Dispose();   
  113.                 isFinish();   
  114.             }   
  115.             catch  
  116.             {   
  117.                 throw new Exception("更新出现错误,网络连接失败!");   
  118.             }   
  119.         }   
  120.   
  121.         /// <summary>   
  122.         /// 检查是否需要更新   
  123.         /// </summary>   
  124.         public void checkUpdate()    
  125.         {   
  126.             try {   
  127.                 WebClient wc = new WebClient();   
  128.                 Stream stream = wc.OpenRead(updateUrl);   
  129.                 XmlDocument xmlDoc = new XmlDocument();   
  130.                 xmlDoc.Load(stream);   
  131.                 XmlNode list = xmlDoc.SelectSingleNode("Update");   
  132.                 foreach(XmlNode node in list) {   
  133.                     if(node.Name == "Soft" >> node.Attributes["Name"].Value.ToLower() == SoftName.ToLower()) {   
  134.                         foreach(XmlNode xml in node) {   
  135.                             if(xml.Name == "Verson")   
  136.                                 newVerson = xml.InnerText;   
  137.                             else  
  138.                                 download = xml.InnerText;   
  139.                         }   
  140.                     }   
  141.                 }   
  142.   
  143.                 Version ver = new Version(newVerson);   
  144.                 Version verson = Assembly.LoadFrom(loadFile).GetName().Version;   
  145.                 int tm = verson.CompareTo(ver);   
  146.   
  147.                 if(tm >= 0)   
  148.                     isUpdate = false;   
  149.                 else  
  150.                     isUpdate = true;   
  151.             }   
  152.             catch(Exception ex) {   
  153.                               throw new Exception("更新出现错误,请确认网络连接无误后重试!");   
  154.             }   
  155.         }   
  156.   
  157.         /// <summary>   
  158.         /// 获取要更新的文件   
  159.         /// </summary>   
  160.         /// <returns></returns>   
  161.         public override string ToString()   
  162.         {   
  163.             return this.loadFile;   
  164.         }   
  165.     }   
  166. }  
  167.  
  168.  
  169.  
  170. 把代码编译为一个类库文件,通过程序引用就OK啦。
  171.  
  172. 传入的参数已经有注释了。
  173.  
  174. 下面是更新的XML文件类容,传到空间上面就可以了,得到XML文件的地址。
  175.  
  176. view plaincopy to clipboardprint?
  177. <?xml version="1.0" encoding="utf-8" ?>    
  178. <Update>  
  179.    <Soft Name="BlogWriter">  
  180.      <Verson>1.0.1.2</Verson>    
  181.      <DownLoad>http://www.csdn.net/BlogWrite.rar</DownLoad>    
  182.   </Soft>  
  183. </Update>  
  184. <?xml version="1.0" encoding="utf-8" ?> 
  185. <Update>
  186.    <Soft Name="BlogWriter">
  187.      <Verson>1.0.1.2</Verson> 
  188.      <DownLoad>http://www.csdn.net/BlogWrite.rar</DownLoad> 
  189.   </Soft>
  190. </Update> 
  191.  
  192. 程序更新调用方法:
  193.  
  194.  1、先引用上面的DLL
  195.  
  196.  2、调用方法代码 如下:
..................................
  1.   
  2. http://longle.cnblogs.com/

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:C#实现程序的版本升级更新 | Bruce's Blog

发表评论

留言无头像?