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

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

时间: 2010-03-29

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#获取系统版本信息方法

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

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"; //得到一个客户端对象

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

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

验证本机的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# 获取程序集版本、文件版本

一.获取程序集版本 程序代码 复制代码 代码如下: 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#调用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#自动判断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

封装好的js判断操作系统与浏览器代码分享

摘要: 对于前端开发我们最重要的工作就是兼容性,系统的兼容性,浏览器的兼容性等等.今天分享一个我在项目中封装的判断操作系统与浏览器的方法. 操作系统: var os = (function() { var UserAgent = navigator.userAgent.toLowerCase(); return { isIpad : /ipad/.test(UserAgent), isIphone : /iphone os/.test(UserAgent), isAndroid : /andro

c#判断操作系统位数的示例分享

在.net 4.5中,判断操作系统不用再写方法去判断了,有直接可以利用的属性了哦,如下所示:Environment.Is64BitProcess 属性.NET Framework 4.5 确定当前进程是否为 64 位进程. 当然如果是用的.net 4.5以前的童鞋也不必担心,同样也可以用以下的方法来实现判断系统位数. 复制代码 代码如下: private string Distinguish64or32System(){try{string addressWidth = String.Empty

深入C#判断操作系统类型的总结详解

Windows操作系统的版本号一览 操作系统  PlatformID  主版本号  副版本号  Windows95  1  4  0  Windows98  1  4  10  WindowsMe  1  4  90  WindowsNT3.5  2  3  0  WindowsNT4.0  2  4  0  Windows2000  2  5  0  WindowsXP  2  5  1  Windows2003  2  5  2  WindowsVista  2  6  0  Windows

Python判断操作系统类型代码分享

经常地我们需要编写跨平台的脚本,但是由于不同的平台的差异性,我们不得不获得当前所工作的平台(操作系统类型). 代码如下: 复制代码 代码如下: import platform def TestPlatform():     print ("----------Operation System--------------------------")     #Windows will be : (32bit, WindowsPE)     #Linux will be : (32bit,

.NET Core如何获取操作系统中的各种信息

一.前言 .NET Core 是一个通用开发平台,由 Microsoft 和 GitHub 上的 .NET 社区共同维护. 它是跨平台的,支持 Windows.macOS 和 Linux,并且可用于设备.云和嵌入式/IoT 方案. 以下特征对 .NET Core 进行了最好的定义: 部署灵活:可以包含在应用或已安装的并行用户或计算机范围中. 跨平台:可以在 Windows.macOS 和 Linux 上运行:也可移植到其他操作系统. Microsoft.其他公司和个人提供的支持的操作系统 (OS

JS判断浏览器类型与操作系统的方法分析

本文实例讲述了JS判断浏览器类型与操作系统的方法.分享给大家供大家参考,具体如下: navigator.userAgent : userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值. navigator.platform : platform 属性是一个只读的字符串,声明了运行浏览器的操作系统和(或)硬件平台. 判断浏览器类型 IE浏览器 ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident

JavaScript 判断浏览器类型及版本

几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的Chrome浏览器.由于Chrome出生名门,尽管他还是个小家伙,没有人敢小看他.以后,咱们常说浏览器的"四大才子"就得改称为"五朵金花"了. 在网站前端开发中,浏览器兼容性问题本已让我们手忙脚乱,Chrome的出世不知道又要给我们添多少乱子.浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本. JavaScript是前端开发的主要语言,我们可以通过编写J

js判断浏览器类型,版本的代码(附多个实例代码)

在网站前端开发中,浏览器兼容性问题本已让我们手忙脚乱,Chrome的出世不知道又要给我们添多少乱子.浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本. JavaScript是前端开发的主要语言,我们可以通过编写JavaScript程序来判断浏览器的类型及版本.JavaScript判断浏览器类型一般有两种办法,一种是根据各种浏览器独有的属性来分辨,另一种是通过分析浏览器的userAgent属性来判断的.在许多情况下,值判断出浏览器类型之后,还需判