inform自动更新程序扫盲贴
2014-03-18 19:15
106 查看
这是自动更新是单独的一个exe 可能有童鞋要问 为啥子是单独一个exe呢 俺的思路是这样 这个exe根据版本号从服务端下载程序 下载完成后 替换主程序的exe 并重新启动主程序exe
看看这个autoupdate的代码吧
主要如下 这里提供一个思路
程序代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Update;
using System.Threading;
using System.IO;
using System.Runtime.InteropServices;
namespace autoUpdate
{
public partial class Form1 : Form
{
[DllImport("zipfile.dll")]
public static extern int MyZip_ExtractFileAll(string zipfile, string pathname);
public Form1()
{
InitializeComponent();
//清除之前下载来的rar文件
if (File.Exists(Application.StartupPath + "\\Update_autoUpdate.rar"))
{
try
{
File.Delete(Application.StartupPath + "\\Update_autoUpdate.rar");
}
catch (Exception)
{
}
}
if (Directory.Exists(Application.StartupPath + "\\autoupload"))
{
try
{
Directory.Delete(Application.StartupPath + "\\autoupload", true);
}
catch (Exception)
{
}
}
//检查服务端是否有新版本程序
checkUpdate();
timer1.Enabled = true;
}
SoftUpdate app = new SoftUpdate(Application.ExecutablePath, "xinDianClient");
public void checkUpdate()
{
app.UpdateFinish += new UpdateState(app_UpdateFinish);
try
{
if (app.IsUpdate)
{
app.Update();
}
else
{
MessageBox.Show("未检测到新版本!");
Application.Exit();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void app_UpdateFinish()
{
//解压下载后的文件
string path = app.FinalZipName;
if (File.Exists(path))
{
//后改的 先解压滤波zip植入ini然后再重新压缩
string dirEcgPath = Application.StartupPath + "\\" + "autoupload";
if (!Directory.Exists(dirEcgPath))
{
Directory.CreateDirectory(dirEcgPath);
}
//开始解压压缩包
MyZip_ExtractFileAll(path, dirEcgPath);
try
{
//复制新文件替换旧文件
4000
DirectoryInfo TheFolder = new DirectoryInfo(dirEcgPath);
foreach (FileInfo NextFile in TheFolder.GetFiles())
{
File.Copy(NextFile.FullName, Application.StartupPath + "\\program\\" + NextFile.Name, true);
}
Directory.Delete(dirEcgPath,true);
File.Delete(path);
//覆盖完成 重新启动程序
path = Application.StartupPath + "\\program";
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "xinDianClient.exe";
process.StartInfo.WorkingDirectory = path;//要掉用得exe路径例如:"C:\windows";
process.StartInfo.CreateNoWindow = true;
process.Start();
Application.Exit();
}
catch (Exception)
{
MessageBox.Show("请关闭系统在执行更新操作!");
Application.Exit();
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
label2.Text = "下载文件进度:" + COMMON.CommonMethod.autostep.ToString() + "%";
if (COMMON.CommonMethod.autostep==100)
{
timer1.Enabled = false;
}
}
}
}
http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E6%BE%B3%E9%97%A8%E5%BD%A9%E7%A5%A8%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E6%96%B0%E6%BE%B3%E9%97%A8%E5%A8%B1%E4%B9%90%E5%9F%8E%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E4%B9%90%E9%80%8F%E4%B9%90%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E9%A1%B6%E5%B0%96%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E5%8D%9A%E5%BD%A9%E7%BD%91qx5%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E4%BA%9A%E6%B4%B2%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85
SoftUpdate是一个下载操作类
程序代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
using System.Net;
using System.Xml;
using COMMON;
namespace Update
{
/// <summary>
/// 更新完成触发的事件
/// </summary>
public delegate void UpdateState();
/// <summary>
/// 程序更新
/// </summary>
public class SoftUpdate
{
private string download;
private const string updateUrl = "http://33.8.11.117:8019/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; }
}
private string _finalZipName = string.Empty;
public string FinalZipName
{
get { return _finalZipName; }
set { _finalZipName = 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;
FinalZipName = filename;
//wc.DownloadFile(download, filename);
wc.DownloadFileAsync(new Uri(download), filename);
wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);
//wc.Dispose();
}
catch
{
throw new Exception("更新出现错误,网络连接失败!");
}
}
void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
(sender as WebClient).Dispose();
isFinish();
}
void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
CommonMethod.autostep = e.ProgressPercentage;
}
/// <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;
}
}
}
看看这个autoupdate的代码吧
主要如下 这里提供一个思路
程序代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Update;
using System.Threading;
using System.IO;
using System.Runtime.InteropServices;
namespace autoUpdate
{
public partial class Form1 : Form
{
[DllImport("zipfile.dll")]
public static extern int MyZip_ExtractFileAll(string zipfile, string pathname);
public Form1()
{
InitializeComponent();
//清除之前下载来的rar文件
if (File.Exists(Application.StartupPath + "\\Update_autoUpdate.rar"))
{
try
{
File.Delete(Application.StartupPath + "\\Update_autoUpdate.rar");
}
catch (Exception)
{
}
}
if (Directory.Exists(Application.StartupPath + "\\autoupload"))
{
try
{
Directory.Delete(Application.StartupPath + "\\autoupload", true);
}
catch (Exception)
{
}
}
//检查服务端是否有新版本程序
checkUpdate();
timer1.Enabled = true;
}
SoftUpdate app = new SoftUpdate(Application.ExecutablePath, "xinDianClient");
public void checkUpdate()
{
app.UpdateFinish += new UpdateState(app_UpdateFinish);
try
{
if (app.IsUpdate)
{
app.Update();
}
else
{
MessageBox.Show("未检测到新版本!");
Application.Exit();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void app_UpdateFinish()
{
//解压下载后的文件
string path = app.FinalZipName;
if (File.Exists(path))
{
//后改的 先解压滤波zip植入ini然后再重新压缩
string dirEcgPath = Application.StartupPath + "\\" + "autoupload";
if (!Directory.Exists(dirEcgPath))
{
Directory.CreateDirectory(dirEcgPath);
}
//开始解压压缩包
MyZip_ExtractFileAll(path, dirEcgPath);
try
{
//复制新文件替换旧文件
4000
DirectoryInfo TheFolder = new DirectoryInfo(dirEcgPath);
foreach (FileInfo NextFile in TheFolder.GetFiles())
{
File.Copy(NextFile.FullName, Application.StartupPath + "\\program\\" + NextFile.Name, true);
}
Directory.Delete(dirEcgPath,true);
File.Delete(path);
//覆盖完成 重新启动程序
path = Application.StartupPath + "\\program";
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "xinDianClient.exe";
process.StartInfo.WorkingDirectory = path;//要掉用得exe路径例如:"C:\windows";
process.StartInfo.CreateNoWindow = true;
process.Start();
Application.Exit();
}
catch (Exception)
{
MessageBox.Show("请关闭系统在执行更新操作!");
Application.Exit();
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
label2.Text = "下载文件进度:" + COMMON.CommonMethod.autostep.ToString() + "%";
if (COMMON.CommonMethod.autostep==100)
{
timer1.Enabled = false;
}
}
}
}
http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E6%BE%B3%E9%97%A8%E5%BD%A9%E7%A5%A8%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E6%96%B0%E6%BE%B3%E9%97%A8%E5%A8%B1%E4%B9%90%E5%9F%8E%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E4%B9%90%E9%80%8F%E4%B9%90%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E9%A1%B6%E5%B0%96%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E5%8D%9A%E5%BD%A9%E7%BD%91qx5%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85 http://www.anjuke.com/sale/rd1/?kw=2014%E5%B9%B4%E4%BA%9A%E6%B4%B2%E5%8D%9A%E5%BD%A9%E7%BD%91%e2%98%85%e7%99%be%e5%ba%a6%e6%8e%a8%e8%8d%90%e2%98%85%e3%80%9068LB.COM%e3%80%91%e2%98%85%e5%a4%8d%e5%88%b6%e6%89%93%e5%bc%80%e2%98%85
SoftUpdate是一个下载操作类
程序代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
using System.Net;
using System.Xml;
using COMMON;
namespace Update
{
/// <summary>
/// 更新完成触发的事件
/// </summary>
public delegate void UpdateState();
/// <summary>
/// 程序更新
/// </summary>
public class SoftUpdate
{
private string download;
private const string updateUrl = "http://33.8.11.117:8019/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; }
}
private string _finalZipName = string.Empty;
public string FinalZipName
{
get { return _finalZipName; }
set { _finalZipName = 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;
FinalZipName = filename;
//wc.DownloadFile(download, filename);
wc.DownloadFileAsync(new Uri(download), filename);
wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);
//wc.Dispose();
}
catch
{
throw new Exception("更新出现错误,网络连接失败!");
}
}
void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
(sender as WebClient).Dispose();
isFinish();
}
void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
CommonMethod.autostep = e.ProgressPercentage;
}
/// <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;
}
}
}
相关文章推荐
- C# winform自动更新程序扫盲
- JAVA自动更新程序
- 自动更新程序源码下载(C#.Net)
- winform自动更新程序实现
- 自动更新程序发布日期的方法
- phoneGap中android程序自动更新代码(适合Android4.0之后版本)
- 利用PHP安装windows自动运行的服务,PHP程序可以实现长时间、自动运行、定时更新功能,直接可以用在项目中的类源代码
- JAVA自动更新程序
- JAVA自动更新程序
- 准备做个Ftp自动更新的程序,提前做下准备
- android之程序自动更新的实现
- 关于cocos2dx客户端程序的自动更新解决方案
- 艾伟_转载:简单的自动更新程序实现
- c# Winform 程序自动更新实现方法
- 使用AIR程序的自动更新框架.
- delphi自动更新程序
- 图形化界面实现客户端自动更新程序
- C#程序自动更新
- Android 程序自动安装下载好的apk 、程序的安装、卸载和更新