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

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

时间: 2024-08-20 13:11:47

asp.net(c#)程序版本升级更新的实现代码_实用技巧的相关文章

asp.net中GridView编辑,更新,合计用法示例_实用技巧

本文实例讲述了asp.net中GridView编辑,更新,合计用法.分享给大家供大家参考,具体如下: 前台代码: <asp:GridView ID="tabgv" runat="server" DataKeyNames="ysId" ShowFooter="True" OnRowDataBound="GridView1_RowDataBound" OnRowCreated="GridView

ASP.net全局程序文件Global.asax用法分析_实用技巧

本文详细讲述了ASP.net全局程序文件Global.asax用法,分享给大家供大家参考.具体分析如下: 一般来说ASP.NET应用程序只能有一个Global.asax文件,该文件支持许多项.具体分析如下: •Application_Start:在应用程序接收到第一个请求时调用,这是在应用程序中给应用程序级的变量赋值或指定对所有用户必须保持的状态的理想位置. •  Session_Start:类似于Application_Start事件,但这个事件在用户第一次访问应用程序时调用.例如,Appli

创建第一个ASP.NET应用程序(第1节)_实用技巧

这一节我们一起学习创建一个根据用户输入来显示相应的欢迎信息的页面,希望小伙伴们可以和我一起动手操作 学习内容:第一步,创建ASP.NET程序 1.运行 Visual Studio 2008.在菜单栏中选择"文件" →"新建" →"项目"命令,在弹出的"新建项目"的对话框中,选择左侧的"其他项目类型"树形目录中的"Visual Studio 解决方案"选项,在右边"Visual

DataAdapter执行批量更新的实例代码_实用技巧

在以前版本的 ADO.NET 中,使用 DataSet 中的更改来更新数据库时,DataAdapter 的 Update 方法每次更新数据库的一行.因为该方法循环访问指定 DataTable 中的行,所以,会检查每个 DataRow,确定是否已修改.如果该行已修改,将根据该行的 RowState 属性值调用相应的 UpdateCommand.InsertCommand 或 DeleteCommand.每一次行更新都涉及网络与数据库之间的双向数据传输.    在 ADO.NET 2.0 中,Dat

ASP.NET返回上一页面的实现代码_实用技巧

解决方法: 程序的相关介绍 主界面:未发货订单列表(http://localhost:18888/Order/UnfilledOrdersList.aspx) 子界面:订单详细信息(http://localhost:18888/Order/ViewOrderDetail.aspx?OrderId= id,其中id的值是在主界面中被选中的那条订单信息的id) 主页面为一个订单的主要信息,GridView中有一个HyperLink控件,通过它可以跳转到"订单详细信息"界面进而查看订单的详细

asp.net 读取并修改config文件实现代码_实用技巧

1. 向项目添加app.config文件: 右击项目名称,选择"添加"→"添加新建项",在出现的"添加新项"对话框中,选择"添加应用程序配置文件":如果项目以前没有配置文件,则默认的文件名称为"app.config",单击"确定".出现在设计器视图中的app.config文件为: <?xmlversion="1.0"encoding="utf-8&qu

ASP.NET自动为URL加上超链接的代码_实用技巧

作为一个程序员,在完成设计后还要根据程序的情况以及用户的反映不断对程序进行改进,这样才能不断地完善自己的作品.笔者在制作完软件商务网的论坛后,发现人们总喜欢在帖子中加上各种有用的URL链接或Email地址.而笔者当初设计时没有考虑到这一点,使得这些URL链接或Email地址只能以文字的形式而并不是以超链接的形式显示,其它浏览帖子的人还必须把这些URL链接拷贝到浏览器中或把Email地址拷贝到Outlook中才能转到相应的链接地址或发送电子邮件到相应的Email地址. 发现这个问题后,笔者即着手进

asp.net session的使用与过期实例代码_实用技巧

1.Session是一种Web会话中的常用状态之一. 2.Session提供了一种把信息保存在服务器内存中的方式.他能储存任何数据类型,包含自定义对象. 3.每个客户端的Seesion是独立存储的. 4.在整个会话过程中,只要SessionID的cookie不丢失,都会保存Session信息的. 5.Session不能跨进程访问,只能由该会话的用户访问.应为提取Session数据的id标识是以Cookie的方式保存到访问者浏览器的缓存里的. 6.当会话终止,或过期时,服务器就清除Session对

在asp.NET 中使用SMTP发送邮件的实现代码_实用技巧

核心代码: 复制代码 代码如下: public class Mail { #region 邮件参数 static public string accountName = System.Configuration.ConfigurationManager.AppSettings["SmtpAccountName"]; static public string password = System.Configuration.ConfigurationManager.AppSettings[