asp.net(c#)程序版本升級(jí)更新的實(shí)現(xiàn)代碼
更新時(shí)間:2010年03月30日 12:28:42 作者:
我們做了程序,不免會(huì)有版本升級(jí),這就需要程序有自動(dòng)版本升級(jí)的功能。那么看看我是如何實(shí)現(xiàn)程序自動(dòng)更新的。
直接上代碼:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
using System.Net;
using System.Xml;
namespace Update
{
/// <summary>
/// 更新完成觸發(fā)的事件
/// </summary>
public delegate void UpdateState();
/// <summary>
/// 程序更新
/// </summary>
public class SoftUpdate
{
private string download;
private const string updateUrl = "http://www.dbjr.com.cn/update.xml";//升級(jí)配置的XML文件地址
#region 構(gòu)造函數(shù)
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>
/// 升級(jí)的名稱
/// </summary>
public string SoftName
{
get { return softName; }
set { softName = value; }
}
#endregion
/// <summary>
/// 更新完成時(shí)觸發(fā)的事件
/// </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("更新出現(xiàn)錯(cuò)誤,網(wǎng)絡(luò)連接失敗!");
}
}
/// <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("更新出現(xiàn)錯(cuò)誤,請(qǐng)確認(rèn)網(wǎng)絡(luò)連接無誤后重試!");
}
}
/// <summary>
/// 獲取要更新的文件
/// </summary>
/// <returns></returns>
public override string ToString()
{
return this.loadFile;
}
}
}
把代碼編譯為一個(gè)類庫文件,通過程序引用就OK啦。
傳入的參數(shù)已經(jīng)有注釋了。
下面是更新的XML文件類容,傳到空間上面就可以了,得到XML文件的地址。
<?xml version="1.0" encoding="utf-8" ?>
<Update>
<Soft Name="BlogWriter">
<Verson>1.0.1.2</Verson>
<DownLoad>http://www.dbjr.com.cn/BlogWrite.rar</DownLoad>
</Soft>
</Update>
程序更新調(diào)用方法:
1、先引用上面的DLL。
2、調(diào)用方法代碼 如下:
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("更新完成,請(qǐng)重新啟動(dòng)程序!", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
好了,整個(gè)程序到此結(jié)束。如覺得有哪里不正確或者有疑問的請(qǐng)給我留言。
復(fù)制代碼 代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
using System.Net;
using System.Xml;
namespace Update
{
/// <summary>
/// 更新完成觸發(fā)的事件
/// </summary>
public delegate void UpdateState();
/// <summary>
/// 程序更新
/// </summary>
public class SoftUpdate
{
private string download;
private const string updateUrl = "http://www.dbjr.com.cn/update.xml";//升級(jí)配置的XML文件地址
#region 構(gòu)造函數(shù)
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>
/// 升級(jí)的名稱
/// </summary>
public string SoftName
{
get { return softName; }
set { softName = value; }
}
#endregion
/// <summary>
/// 更新完成時(shí)觸發(fā)的事件
/// </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("更新出現(xiàn)錯(cuò)誤,網(wǎng)絡(luò)連接失敗!");
}
}
/// <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("更新出現(xiàn)錯(cuò)誤,請(qǐng)確認(rèn)網(wǎng)絡(luò)連接無誤后重試!");
}
}
/// <summary>
/// 獲取要更新的文件
/// </summary>
/// <returns></returns>
public override string ToString()
{
return this.loadFile;
}
}
}
把代碼編譯為一個(gè)類庫文件,通過程序引用就OK啦。
傳入的參數(shù)已經(jīng)有注釋了。
下面是更新的XML文件類容,傳到空間上面就可以了,得到XML文件的地址。
復(fù)制代碼 代碼如下:
<?xml version="1.0" encoding="utf-8" ?>
<Update>
<Soft Name="BlogWriter">
<Verson>1.0.1.2</Verson>
<DownLoad>http://www.dbjr.com.cn/BlogWrite.rar</DownLoad>
</Soft>
</Update>
程序更新調(diào)用方法:
1、先引用上面的DLL。
2、調(diào)用方法代碼 如下:
復(fù)制代碼 代碼如下:
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("更新完成,請(qǐng)重新啟動(dòng)程序!", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
好了,整個(gè)程序到此結(jié)束。如覺得有哪里不正確或者有疑問的請(qǐng)給我留言。
您可能感興趣的文章:
- C# Winform自動(dòng)更新程序?qū)嵗斀?/a>
- c# Winform 程序自動(dòng)更新實(shí)現(xiàn)方法
- C# protobuf自動(dòng)更新cs文件
- C#如何讀取Txt大數(shù)據(jù)并更新到數(shù)據(jù)庫詳解
- c#中Winform實(shí)現(xiàn)多線程異步更新UI(進(jìn)度及狀態(tài)信息)
- C#微信公眾平臺(tái)開發(fā)之a(chǎn)ccess_token的獲取存儲(chǔ)與更新
- C#連接數(shù)據(jù)庫和更新數(shù)據(jù)庫的方法
- C#在子線程中更新窗口部件的寫法
- C#批量更新sql實(shí)例
- 用c# 自動(dòng)更新程序
相關(guān)文章
asp.net下用js實(shí)現(xiàn)鼠標(biāo)移至小圖,自動(dòng)顯示相應(yīng)大圖
asp.net下用js實(shí)現(xiàn)鼠標(biāo)移至小圖,自動(dòng)顯示相應(yīng)大圖...2007-03-03.NetCore使用Swagger+API多版本控制的流程分析
這篇文章主要介紹了.NetCore使用Swagger+API多版本控制的流程分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12ASP.NET MVC 4 中的JSON數(shù)據(jù)交互的方法
本篇文章主要介紹了ASP.NET MVC 4 中的JSON數(shù)據(jù)交互的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04.NET?ORM框架SqlSugar實(shí)現(xiàn)導(dǎo)航查詢功能
今天這篇文章分享一款好用簡(jiǎn)單的ORM框架?SqlSugar,相比?EF?Core的導(dǎo)航查詢更加簡(jiǎn)單,配置更加容易,幾分鐘就能上手,對(duì).NET?ORM框架SqlSugar實(shí)現(xiàn)導(dǎo)航查詢功能感興趣的朋友一起看看吧2022-04-04.net decimal保留指定的小數(shù)位數(shù)(不四舍五入)
大家都知道decimal保留指定位數(shù)小數(shù)的時(shí)候,.NET自帶的方法都是四舍五入的。那么如何讓decimal保留指定位數(shù)小數(shù)的時(shí)候不四舍五入呢,下面通過這篇文中的示例代碼來一起看看吧。2016-12-12詳解ASP.NET MVC下的異步Action的定義和執(zhí)行原理
這篇文章主要介紹了詳解ASP.NET MVC下的異步Action的定義和執(zhí)行原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12