C#实现在线更新软件
更新时间:2015年05月25日 15:11:16 投稿:hebedich
winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了这一缺陷,有较好的参考价值
通过某些手段后台更新软件。首先你要有一个放置新版本信息的网站
UpdateSoftwareForm.cs
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 CCWin; using System.Net; using System.Collections; using System.IO; using System.Xml; using System.Diagnostics; using System.Threading; namespace WriteBook { public partial class UpdateSoftwareForm : Skin_Metro { public UpdateSoftwareForm() { InitializeComponent(); } #region 一些对象和变量 //使用WebClient下载 WebClient client = new WebClient(); ArrayList downlist = new ArrayList(); //当前版本 string nowversion = null; //最新版本 string latesversion = null; #endregion #region 获取版本号 /// <summary> /// 从服务器上获取最新的版本号 /// </summary> public void DownloadCheckUpdateXml() { try { //第一个参数是文件的地址,第二个参数是文件保存的路径文件名 client.DownloadFile("http://bbs.cloudtour.tk/SoftwareDownload/WriteBook/WriteBook2.xml", "WriteBook2.xml"); } catch { MessageBox.Show("没有检测到更新。", "提示"); this.Close(); } } /// <summary> /// 获取本地软件的版本号 /// </summary> private void NowVersion() { nowversion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + "\n"; LocalText.Text = nowversion; } /// <summary> /// 读取从服务器获取的最新版本号 /// </summary> public void LatestVersion() { try { if (File.Exists("WriteBook2.xml.xml")) { XmlDocument doc = new XmlDocument(); //加载要读取的XML doc.Load("WriteBook2.xml.xml"); //获得根节点 XmlElement WriteBook = doc.DocumentElement; //获得子节点 返回节点的集合 XmlNodeList Update = WriteBook.ChildNodes; foreach (XmlNode item in Update) { latesversion = item.InnerText; } LatestText.Text = latesversion; } else { MessageBox.Show("没有检测到更新。", "提示"); this.Close(); } } catch { this.Close(); } } #endregion #region 初始化程序 /// <summary> /// 初始化程序 /// </summary> private void InitializeandInstall() { UpdateProgressBar.Value = 20; DownloadCheckUpdateXml(); UpdateProgressBar.Value = 40; NowVersion(); UpdateProgressBar.Value = 60; LatestVersion(); UpdateProgressBar.Value = 80; DownloadInstall(); UpdateProgressBar.Value = 100; } #endregion #region 安装and删除 /// <summary> /// 下载安装包 /// </summary> public void DownloadInstall() { try { if (nowversion == latesversion) { MessageBox.Show("您已经是最新版本。", "提示"); } else if (nowversion != latesversion && File.Exists("WriteBook2.xml")) { MessageBox.Show("发现新版本,即将下载更新补丁。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); client.DownloadFile("http://bbs.cloudtour.tk/SoftwareDownload/WriteBook/WBsetup.exe", "WBsetup.exe"); if (File.Exists("Setup.exe")) { InstallandDelete(); } else { for (int i = 1; i < 3; i++) { client.DownloadFile("http://bbs.cloudtour.tk/SoftwareDownload/WriteBook/WBsetup.exe", "WBsetup.exe"); } MessageBox.Show("下载失败,请检查您的网络连接是否正常。", "提示"); this.Close(); } } } catch { MessageBox.Show("更新失败,没有发现新版本。", "提示"); this.Close(); } } /// <summary> /// 安装及删除 /// </summary> private void InstallandDelete() { try { DialogResult dr = MessageBox.Show("下载更新成功,是否安装新更新?", "提示", MessageBoxButtons.YesNoCancel); if (dr == System.Windows.Forms.DialogResult.Yes) { //启动安装程序 System.Diagnostics.Process.Start("WBsetup.exe"); Thread td = new Thread(JudgeInstall); td.Start(); } else { } } catch { MessageBox.Show("发生未知错误,更新失败。", "提示"); this.Close(); } } /// <summary> /// 判断安装进程是否存在 /// </summary> public void JudgeInstall() { while (true) { Process[] processList = Process.GetProcesses(); foreach (Process process in processList) { if (process.ProcessName == "WBsetup.exe") { } else { DialogResult dr = MessageBox.Show("更新成功,是否删除安装包?", "提示", MessageBoxButtons.YesNo); if (dr == System.Windows.Forms.DialogResult.Yes) { File.Delete("WBsetup.exe"); File.Delete("WriteBook2.xml"); } } } } } #endregion /// <summary> /// 点击初始化程序 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void UpdateButton_Click(object sender, EventArgs e) { InitializeandInstall(); } } }
以上所述就是本文的全部内容了,希望大家能够喜欢。
相关文章
C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信
这篇文章主要介绍了C#使用Protocol Buffer(ProtoBuf)进行Unity的Socket通信的实例,Protocol Buffer是Google开发的数据格式,也是除了XML和JSON之外人气第三高的^^需要的朋友可以参考下2016-04-04
最新评论