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


    C#实现程序的版本升级更新 收藏    我们做了程序,不免会有版本升级,这就需要程序有自动版本升级的功能。
    那么看看我是如何实现程序自动更新的。
    直接上代码:
    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.csdn.net/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文件的地址。

    view plaincopy to clipboardprint
    ?
    <?xml version="1.0" encoding="utf-8" ?>
    <Update>
    <Soft Name="BlogWriter">
    <Verson>1.0.1.2</Verson>
    <DownLoad>http://www.csdn.net/BlogWrite.rar</DownLoad>
    </Soft>
    </Update>
    <?xml version="1.0" encoding="utf-8" ?>
    <Update>
    <Soft Name="BlogWriter">
    <Verson>1.0.1.2</Verson>
    <DownLoad>http://www.csdn.net/BlogWrite.rar</DownLoad>
    </Soft>
    </Update>

    程序更新调用方法:

    1、先引用上面的DLL。

    2、调用方法代码 如下:

    + expand sourceview plaincopy to clipboardprint?


    本文来自CSDN博客,转载请标明出处:http:
    //blog.csdn.net/whowhen21/archive/2010/03/18/5391879.aspx
  • 相关阅读:
    判断质数
    猜拳三局两胜
    输入年月日判断是这一年的哪一天
    switch case
    猜拳
    判断年月日是否正确
    老狼老狼几点了
    判断是否中奖
    平滑部署war包到tomcat-deploy.sh
    只用120行Java代码写一个自己的区块链-3挖矿算法
  • 原文地址:https://www.cnblogs.com/longle/p/2072917.html
Copyright © 2020-2023  润新知