您的位置:首页 > 编程语言 > ASP

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

2010-03-30 00:00 1056 查看
直接上代码:
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); 
        } 
    } 
}

好了,整个程序到此结束。如觉得有哪里不正确或者有疑问的请给我留言。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: