源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

asp.net(c#)程序版本升级更新的实现代码

  • 时间:2022-12-13 10:19 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:asp.net(c#)程序版本升级更新的实现代码
直接上代码:
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.IO; using System.Net; using System.Xml; namespace Update {     /// <summary>     /// 更新完成触发的事件     /// </summary>     public delegate void UpdateState();     /// <summary>     /// 程序更新     /// </summary>     public class SoftUpdate     {         private string download; private const string updateUrl = "http://www.1sucai.cn/update.xml";//升级配置的XML文件地址         #region 构造函数         public SoftUpdate() { }         /// <summary>         /// 程序更新         /// </summary>         /// <param name="file">要更新的文件</param>         public SoftUpdate(string file,string softName) {             this.LoadFile = file; this.SoftName = softName;         }         #endregion         #region 属性         private string loadFile;         private string newVerson; private string softName;         private bool isUpdate;         /// <summary>         /// 或取是否需要更新         /// </summary>         public bool IsUpdate         {             get             {                 checkUpdate();                 return isUpdate;             }         }         /// <summary>         /// 要检查更新的文件         /// </summary>         public string LoadFile         {             get { return loadFile; }             set { loadFile = value; }         }         /// <summary>         /// 程序集新版本         /// </summary>         public string NewVerson         {             get { return newVerson; }         } /// <summary> /// 升级的名称 /// </summary> public string SoftName { get { return softName; } set { softName = value; } }         #endregion         /// <summary>         /// 更新完成时触发的事件         /// </summary>         public event UpdateState UpdateFinish;         private void isFinish() {             if(UpdateFinish != null)                 UpdateFinish();         }         /// <summary>         /// 下载更新         /// </summary>         public void Update()         { try { if (!isUpdate) return; WebClient wc = new WebClient(); string filename = ""; string exten = download.Substring(download.LastIndexOf(".")); if (loadFile.IndexOf(@"\") == -1) filename = "Update_" + Path.GetFileNameWithoutExtension(loadFile) + exten; else filename = Path.GetDirectoryName(loadFile) + "\\Update_" + Path.GetFileNameWithoutExtension(loadFile) + exten; wc.DownloadFile(download, filename); wc.Dispose(); isFinish(); } catch { throw new Exception("更新出现错误,网络连接失败!"); }         }         /// <summary>         /// 检查是否需要更新         /// </summary>         public void checkUpdate()         {             try {                 WebClient wc = new WebClient();                 Stream stream = wc.OpenRead(updateUrl);                 XmlDocument xmlDoc = new XmlDocument();                 xmlDoc.Load(stream);                 XmlNode list = xmlDoc.SelectSingleNode("Update");                 foreach(XmlNode node in list) {                     if(node.Name == "Soft" && node.Attributes["Name"].Value.ToLower() == SoftName.ToLower()) {                         foreach(XmlNode xml in node) {                             if(xml.Name == "Verson")                                 newVerson = xml.InnerText;                             else                                 download = xml.InnerText;                         }                     }                 }                 Version ver = new Version(newVerson);                 Version verson = Assembly.LoadFrom(loadFile).GetName().Version;                 int tm = verson.CompareTo(ver);                 if(tm >= 0)                     isUpdate = false;                 else                     isUpdate = true;             }             catch(Exception ex) { throw new Exception("更新出现错误,请确认网络连接无误后重试!");             }         }         /// <summary>         /// 获取要更新的文件         /// </summary>         /// <returns></returns>         public override string ToString()         {             return this.loadFile;         }     } }
把代码编译为一个类库文件,通过程序引用就OK啦。 传入的参数已经有注释了。 下面是更新的XML文件类容,传到空间上面就可以了,得到XML文件的地址。
[u]复制代码[/u] 代码如下:
<?xml version="1.0" encoding="utf-8" ?> <Update> <Soft Name="BlogWriter"> <Verson>1.0.1.2</Verson> <DownLoad>http://www.1sucai.cn/BlogWrite.rar</DownLoad> </Soft> </Update>
程序更新调用方法: 1、先引用上面的DLL。 2、调用方法代码 如下:
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Threading; using System.Net; using System.Xml; using Update; namespace UpdateTest {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();             checkUpdate();         }         public void checkUpdate()         { SoftUpdate app = new SoftUpdate(Application.ExecutablePath, "BlogWriter");             app.UpdateFinish += new UpdateState(app_UpdateFinish); try { if (app.IsUpdate && MessageBox.Show("检查到新版本,是否更新?", "Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { Thread update = new Thread(new ThreadStart(app.Update)); update.Start(); } } catch (Exception ex) { MessageBox.Show(ex.Message); }         }         void app_UpdateFinish() {                 MessageBox.Show("更新完成,请重新启动程序!", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information);         }     } }
好了,整个程序到此结束。如觉得有哪里不正确或者有疑问的请给我留言。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部