200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > asp.net(c#)程序版本升级更新的实现代码

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

时间:2024-04-05 23:25:21

相关推荐

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

我们做了程序,不免会有版本升级,这就需要程序有自动版本升级的功能。那么看看我是如何实现程序自动更新的。

详细出处参考:/article/22785.htm

直接上代码:

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.Reflection;

using System.IO;

using ;

using System.Xml;

namespace Update

{

/// <summary>

/// 更新完成触发的事件

/// </summary>

public delegate void UpdateState();

/// <summary>

/// 程序更新

/// </summary>

public class SoftUpdate

{

private string download;

private const string updateUrl = "/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 = pareTo(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>/BlogWrite.rar</DownLoad>

</Soft>

</Update>

程序更新调用方法:

1、先引用上面的DLL。

2、调用方法代码 如下:

复制代码 代码如下:

using System;

using System.Collections.Generic;

using ponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Threading;

using ;

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

}

}

}

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

详细出处参考:/article/22785.htm

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。