百度网盘源码加文件:http://pan.baidu.com/s/1qYe2Vgg

功能:通过网站更新用户的软件,需要联网,也可以通过本地网站更新局域网用户软件。

根本实现:1.一个网站(本地就可以)然后运行update.exe->通过update.xml获取网址,然后查看当前版本号和网站的server.xml最高版本号对比。然后判断是否更新。

2.更新就下载zip文件,解压替换并删除。

3.更新update.xml文档版本信息,跟新结束。

代码:解析xml文件:

     /// <summary>
        /// 载入并解析XML
        /// </summary>
        private void LoadXml()
        {
            XmlDocument document = new XmlDocument();
            try
            {
                document.Load(updateurl + "Server.xml");
                XmlNode node = document.SelectSingleNode("//updates");

                //获取最新版本号
                version = Convert.ToInt32(node.Attributes["version"].Value);

                //所有需要升级文件大小,文件列表,sql列表
                XmlNodeList updateList = document.SelectNodes("//updates//update");
                foreach (XmlNode n in updateList)
                {
                    long tempVersion = Convert.ToInt32(n.Attributes["version"].Value);
                    long tempSize = Convert.ToInt64(n.Attributes["size"].Value);
                    if (tempVersion > localversion && tempVersion <= version)
                    {
                        allsize += tempSize;
                        versions.Add(tempVersion.ToString());
                        //获取升级文件列表
                        XmlNodeList fileList = n.SelectNodes("//update[@version='" + tempVersion + "']//files//file");
                        foreach (XmlNode n1 in fileList)
                        {
                            files.Add(n1.InnerText);
                        }
                        //获取执行的SQL语句列表
                        XmlNodeList sqlList = n.SelectNodes("//update[@version='" + tempVersion + "']//sqls//sql");
                        foreach (XmlNode n2 in sqlList)
                        {
                            sqls.Add(n2.InnerText);
                        }
                        //升级的提示信息
                        XmlNodeList msgList = n.SelectNodes("//update[@version='" + tempVersion + "']//msg");
                        foreach (XmlNode n3 in msgList)
                        {
                            msg += string.Format(CultureInfo.InvariantCulture, "版本【{0}】 {1}", new object[] { tempVersion, n3.InnerText.Replace("\r\n\t\t", "") }) + "\r\n";
                        }
                    }

                }

            }
            catch (Exception e)
            {
                //Console.WriteLine(e.Message);
                MessageBox.Show("连接升级服务器失败,请重试!", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

解析xml网站

升级
   public void DownloadProgressChanged(object wcsender, DownloadProgressChangedEventArgs ex)
        {
            PBNow.Text = "正在下载:" + filename + "[ " + ConvertSize(ex.BytesReceived) + "/" + ConvertSize(ex.TotalBytesToReceive) + " ]";
            filesize = ex.TotalBytesToReceive;
            ftemp = ((float)(downedsize + ex.BytesReceived)) / ((float)allsize);
            PbAll.Value = Convert.ToInt32((float)(this.ftemp * 100f));
            PBNow.Value = ex.ProgressPercentage;
        }

进度条

跟新效果:

更新前:

更新后:

一些代码图解:本地update.xml

网站server.xml

新手:代码粗糙,只是一个简单的demo,只能简单参考一下,有问题及时联系我。源码和全部文件都在网盘里面。

.exe简单的更新软件demo的更多相关文章

  1. <转>exe & dll自我更新

    exe & dll自我更新 分类: c/c++ 2008-10-16 22:07 756人阅读 评论(1) 收藏 举报 exedlldelayapi游戏 exe与dll的自我更新     在改 ...

  2. Unity编程笔录--ulua+PureMVC框架简单热更新使用

    ulua+PureMVC框架简单热更新使用 前言: 1:作者官网论坛 首先介绍的是这个框架是一位大牛  骏擎[CP]  jarjin   写的,据说原本是"非常多人不知道怎么使用Ulua,所 ...

  3. 树莓派3B更新软件

    因为软件是要不断更新的,所以半个月或者一个月要升级一下软件 升级软件非常简单 在终端或者SSH里输入 sudo apt-get update && apt-get upgrade -y ...

  4. 2nd 简单四则运算更新

    简单四则运算更新 功能:由随机数决定出题为10个以内的数字,并确定是否出现括号(仅限一对),顺序输出表达式,并用栈的方式进行计算,判断正误.其他功能有待进一步实现. 头文件 #include < ...

  5. Homebrew 安装及更新软件

    brew brew install 安装 brew uninstall 卸载 brew update 更新 homebrew brew upgrade 安装已更新软件 brew cleanup 清理 ...

  6. 赫然:Windows Live Writer 批量博客更新软件使用教程

    http://www.wocaoseo.com/thread-144-1-1.html 推广人员需要使用多个博客,一个一个登陆更新是很麻烦的事情,网上的桌面批量更新博客软件也不少,今天在此推荐大家使用 ...

  7. 一个简单的webservice的demo(下)winform异步调用webservice

    绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...

  8. 一个简单的Webservice的demo(中)_前端页面调用

    首先新建项目,这里有两种调用方式,为了能方便理解,新建页面WebserviceTest如下图: 先引用写好的服务,这里用上次写好的服务.见上次写的一个简单的Webservice的demo,简单模拟服务 ...

  9. ubuntu更新软件源

    更新源方法: 1. 打开终端.单击主菜单中的“应用程序 - 附件 - 终端”. 2. 修改更新服务器列表.请在终端中执行下面的两条命令: sudo cp /etc/apt/sources.list / ...

随机推荐

  1. JavaScript中定义变量和存储值的类型判断

    以严谨的语法表示作为前提 首先变量被定义,然后给变量赋予一定的值,变量真正的作用就是存储值 变量的定义和赋值 变量的定义: var a 使用关键字var+变量名表示定义一个变量 a 变量的赋值: va ...

  2. C#异步的世界【下】

    接上篇:<C#异步的世界[上]> 上篇主要分析了async\await之前的一些异步模式,今天说异步的主要是指C#5的async\await异步.在此为了方便的表述,我们称async\aw ...

  3. 用C#代码实现类似QQ窗体的“上、左、右”停靠功能

    大家都知道QQ有一个自动停靠功能,即“上.左.右”,当你把窗体拖到屏幕边缘,然后移开鼠标它会自动缩放,然后只显示一小小点出来,我们仔细观察会发现其实它只露3像素左右的边缘,当你鼠标移上去它又会伸出来, ...

  4. [HDU2037]贪心入门

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  5. .NET入行之工作前

    时间就像轻风一样,刻意感受的时候几乎把你吹倒,不留意的时候又从你身边轻轻飘走了:长此以后,我怕自己会变得麻木,忘记了原来的样子.所以还是决定给自己留点什么,万一哪天忘记了,还可以再翻起来. 工作两年的 ...

  6. webots自学笔记(二)节点与机器人建模

    原创文章,出自"博客园, _阿龙clliu" :http://www.cnblogs.com/clliu/ 上一次介绍了界面和一个简单的自由落体,然而在实际运用中,机器人的结构都是 ...

  7. 用C++11实现C++17的apply(动态数组用作函数参数)

    标题有点错误,apply是用tuple做参数,调用一个函数.这个标题是为了能更好的适配搜索关键字. 动态数组用作函数参数更适合嵌入了脚本环境的C++程序,比如lua或javascript(js). 若 ...

  8. UI-- Empty Application 新建空工程

    1> Empty Application  在Xcode 5 中的文件路径 : Xode 5 路径:Contents   Developer  Platforms iPhoneOS.platfo ...

  9. 关于PHP单双引号解析变量的问题

    双引号可以解析变量,单引号不行 $qweqwe = 123; echo "$qweqwe"; 输出123 echo '$qweqqwe'; 输出$qweqwe

  10. Ajax写分页查询(实现不刷新页面)

    获取数据库中大量的信息显示在页面上,必然要使用到分页查询: 若不使用Ajax,而是用其他的方法,肯定是要刷新页面的,用户体检很不好, 所以最好使用Ajax的方法写分页查询: 1.先来找一张数据很多的表 ...