2025年4月1日 星期二 乙巳(蛇)年 正月初二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > .net

C#实现程序的版本升级更新

时间:10-29来源:作者:点击数:36

我们做了程序,不免会有版本升级,这就需要程序有自动版本升级的功能。那么看看我是如何实现程序自动更新的。

直接上代码:

  • 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.cdsy.xyz/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文件的地址。

  • <?xml version="1.0" encoding="utf-8" ?>
  • <Update>
  • <Soft Name="BlogWriter">
  • <Verson>1.0.1.2</Verson>
  • <DownLoad>http://www.cdsy.xyz/BlogWrite.rar</DownLoad>
  • </Soft>
  • </Update>

程序更新调用方法:

1、先引用上面的DLL。

2、调用方法代码 如下

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

好了,整个程序到此结束。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门