asp.net(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.jb51.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文件的地址。


代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<Update>
<Soft Name="BlogWriter">
<Verson>1.0.1.2</Verson>
<DownLoad>http://www.jb51.net/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);
        }
    }
}

好了,整个程序到此结束。如觉得有哪里不正确或者有疑问的请给我留言。

(0)

相关推荐

  • C#中使用1.7版本驱动操作MongoDB简单例子

    复制代码 代码如下: //创建数据库链接 //在1.7的版本驱动中这样写是会报 MongoServer方法已过时的 //MongoServer server =  MongoDB.Driver.MongoServer.Create(strconn); //带有用户名,密码的如下写法,不带的则直接ip+端口就可以 const string connectionString = "mongodb://city:liyang@192.168.1.211:27017"; //得到一个客户端对象

  • 验证本机的excel版本的C#代码

    复制代码 代码如下: /// <summary> /// 安装的excel的版本,0为没有安装,大于1说明安装了多个. /// </summary> /// <returns></returns> public static List<string> ExcelVersion() { List<string> list = new List<string>(); List<string> lisemp = ne

  • C#如何检测操作系统版本

    本文实例为大家分享了C#检测操作系统版本的方法,供大家参考,具体内容如下 我们通过System.Environment.OSVersion.Version获得操作系统的版本号,然后再根据版本号进行判断操作系统是什么版本. Version 类的属性 参考于:https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724834(v=vs.85).aspx 注意:在msdn官方文档有说明 → OSVersion 属性报告两个相同的版本号 (

  • C#获取系统版本信息方法

    直接贴代码: 复制代码 代码如下: public class OSInfoMation { public static string OSBit() { try { ConnectionOptions oConn = new ConnectionOptions(); System.Management.ManagementScope managementScope = new System.Management.ManagementScope("\\\\localhost", oCon

  • C#调用C++版本dll时的类型转换需要注意的问题小结

    C#对于C++的dll引用时,经常会遇到类型转换和struct的转换 1. C++ 里的Char类型是1 个字节,c#里的Char是两个字节,不可以对应使用:可使用c#里的byte对应 2. structType temp = (structType)Marshal.PtrToStructure(IntPtr, typeof(structType));说明:此方式转换只针对包含c++基本类型的结构体,如果包含指针数组的结构体,使用泛型函数比较方便. 3. [StructLayoutAttribu

  • C# 获取程序集版本、文件版本

    一.获取程序集版本 程序代码 复制代码 代码如下: label版本.Text = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); 二.获取文件版本 程序代码 复制代码 代码如下: using System.Diagnostics; FileVersionInfo myFileVersion = FileVersionInfo.GetVersionInfo (System.Windows

  • 磁盘配额的wmi版本(C#)

    using System;  using System.Management;  namespace DiskQuota  {       /// <summary>       /// Class1 的摘要说明.       /// </summary>       class Class1       {           /// <summary>           /// 应用程序的主入口点.           /// </summary> 

  • C#连接Excel2003和Excel2007以上版本做数据库的连接字符串

    复制代码 代码如下: string fileExt = Path.GetExtension(excelPath); string conn = ""; if (fileExt == ".xls") { conn = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + excelPath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX

  • C#自动判断Excel版本使用不同的连接字符串

    用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的. /// <summary> /// 把数据从Excel装载到DataTable /// </summary> /// <param name="pathName">带路径的Excel文件名</param> /// <param name="sheetName

  • C#实现判断操作系统是否为Win8以上版本

    1.利用C#获取OS的版本号 (1) 原理说明 Environment类的OSVersion属性是一个OperatingSystem类型的对象,OperatingSystem类表示有关操作系统的信息,如版本和平台标识符.OperatingSystem类的Version属性,描述了操作系统的主版本号.次版本号.内部版本号和修正版本号,所以可以使用Environment.OSVersion.Version来获取操作系统的版本信息. (2) 具体代码 using System; namespace G

随机推荐