自动更新程序AutoUpdate.exe

https://git.oschina.net/victor596jm/AutoUpdate.git

1.获取源码 http://git.oschina.net/victor596jm/AutoUpdate 编译成 AutoUpdate.exe,AutoUpdateLib.dll,并与你的主程序放在同一个目录

2.配置文件 UpdateList.xml

此配置文件记录要更新的文件列表,版本等信息。文件同时存在于服务器(IIS)和客户端,当AutoUpdate.exe启动时会根据客户端的Updatelist.xml文件的节点<Url>获取本次更新源(可以有Url,Url1,Url2,Url3节点,更新时会测速选择最优的线路),然后下载服务器的UpdateList.xml文件与本地文件进行比较确定此次要更新的文件列表.执行更新后最终服务器的Updatelist.xml与客户端的文件会保持一致.Updatelist.xml文件如下:

<?xml version="1.0" encoding="gb2312"?>
<AutoUpdater><description>AutoUpdate</description><Updater><RootUrl>http://d1.domain.com:8765/vf/</RootUrl><RootUrl1>http://d1.domain.com:8765/vf/</RootUrl1><Url>http://update.domain.com:8765/vf/</Url> <!-- 客户端使用这个地址作为更新源 --><NeedUpdate>YES</NeedUpdate>          <!-- 客户端根据此设置是否要执行更新 --><RequiredVersion>8.8.0</RequiredVersion><Continue>YES</Continue><LastUpdateTime>2013-10-15</LastUpdateTime></Updater><Application applicationId="你的应用程序名称"><EntryPoint>主应用程序名称.exe</EntryPoint>  <!-- 自动程序会依据这个配置杀死主程序以便于执行更新后文件覆盖 --><Location>.</Location><Version>2.05.111</Version>          <!-- 程序版本,注意更新程序不会依据此版本来获取更新文件列表 --><MinVersion>2.01.144</MinVersion><VersionSort>Professional</VersionSort></Application><Files><File IsKeyUpt="1" Ver="2.0.2.27" Name="xxx.exe" />  <File IsKeyUpt="0" Ver="2.0.0.2" Name="CreateShortCut.exe" /><File IsKeyUpt="0" Ver="2.0.0.5" Name="UpdateJob.txt" RenameTo="UpdateJob.cmd" /><File IsKeyUpt="0" Ver="2.0.0.1" Name="SYNC\Sync.exe.config.xml" RenameTo="SYNC\Sync.exe.config" /></Files>
</AutoUpdater>

说明:

(1). IsKeyUpt :是否关键更新 如果在更新过程中某关键更新文件未能下载成功,则会忽略本次更新

(2). Ver:记录文件版本

客户端版本小于服务器版本则会把文件加到更新列表中, 比如 服务端为 : 3.0.0.1,客户端为 1.0.0.01 ,忽略'点'即 (3001<10001,这时文件不会更新,记得服务器版本要写成 3.0.0.01 就可以了,如果觉得不妥你可以自己修改  )

(3). RenameTo: 文件名重命名 因为有些文件是无法从IIS下载的如 .bat,.cmd文件,这时你可以在服务端重命名为可更新的文件,客户端更新后会根据设置自动改名

3.主程序应用集成自动更新程序

我的做法是:在主程序应用不带参数执行的情况下要自动启动AutoUpdate.exe来执行更新操作, 当更新程序发现如果可用的更新就自已退出;如果有则执行更新,在文件下载后更新程序会自动杀死主进程,然后覆盖文件,在完成覆盖文件后再以参数 /NOUPDATE启动主进程

可以在 Main(string[] args) 嵌入以下代码,先在主工程中引用 AutoUpdateLib.dll

  //以下语句启动自动更新功能bool MainProgRunned = (clsPublic.ProgProcessCount("你的主应用应用.EXE") > 1);if ((null == Args || Args.Length == 0) && (!MainProgRunned)){try{Process proc = Process.GetCurrentProcess();string curProcess = proc.ProcessName.ToUpper();if (Common.AutoUpdateFunc.NeedUpdate && curProcess.IndexOf("VSHOST") < 0){new BIN.AutoUpdateFunc("UpdateList.xml")).InvokeAutoUpdate();}}catch (Exception ex){}}
                    Common.ProgRunned("AutoUpate.exe", true); //杀死自动更新程序
            //启动主界面 

另外,下载文件没有加MD5检验

转载于:https://www.cnblogs.com/victor596/p/4749968.html

C# WINFORM的自动更新程序相关推荐

  1. C#软件自动更新程序

    2019独角兽企业重金招聘Python工程师标准>>> 基于C#实现的软件自动更新程序,之前在网上搜集了两款软件自动更新程序,在实际应用中,对部分BUG进行修复,添加+完善一些功能. ...

  2. 使用 advanced installer 为 winform 做自动更新

    advanced installer 是一款打包程序,基于 windows installer 并扩展了一些功能,比如安装统计,自动更新,授权验证等,本文将介绍你如果使用 advanced insta ...

  3. 如何制作自动更新程序?

    原文出自:http://blog.csdn.net/metaphysis/article/details/18866631 如何制作自动更新程序? [版权所有 邱秋 2014 metaphysis@y ...

  4. python自动更新程序

    简介 windows 自动更新程序 最近用python给开发了一个windows监控软件,用于监控电脑的运行情况,更新电脑软件.由于有几十电脑,一台一台手动更新就不太靠谱了,于是就开发了一个自动更新软 ...

  5. 简单的自动更新程序实现

    本文将演示一种桌面程序自动更新方案,其步骤比较多,但原理非常简单,通用性尚可,对于小型应用来说,直接拿去就可以用了. 原理 服务器端的结构是这样的: 其工作原理如下: Update.asmx仅提供一个 ...

  6. 艾伟_转载:简单的自动更新程序实现

    本文将演示一种桌面程序自动更新方案,其步骤比较多,但原理非常简单,通用性尚可,对于小型应用来说,直接拿去就可以用了. 原理 服务器端的结构是这样的: 其工作原理如下: Update.asmx仅提供一个 ...

  7. C#WinForm App自动更新(Live Update)架构

    一. 基本思路     一直做Web Form开发,最近开始尝试了一下Win Form,做了一个小系统,在发布了第一个可用版本之后,顺便实现了自动更新功能.之前没有这方面的经验,也没有翻阅相关资料,自 ...

  8. 【原创】自动更新程序2--更新程序的主窗体(技术:spring.net+三层架构+webservice+IrisSkin2换肤)...

    上篇文章主要介绍了webservice的部署以及主要的代码,下面给大家贴上主程序的代码,并简单的讲解.主程序判断是否有更新时通过主程序目录下有一个update.ini文件内的version是否有变化, ...

  9. 我的软件之自动更新程序

    实现升级程序自身升级和更新主程序: 主要逻辑:主程序启动---主程序检测到新版本---主程序退出,启动升级程序--升级程序启动---检测升级程序自身版本---发现升级程序新版本---重命名升级程序-- ...

最新文章

  1. 初识Hibernate之关联映射(一)
  2. 对梯度下降法的简单理解
  3. Docker实战:Docker安装部署RabbitMQ
  4. 用Python实现队列
  5. java 怎么通过url获取远程服务器上某个文件夹下的所有文件_JMX远程代码漏洞研究...
  6. Android事件分发 笔记
  7. 你掌握垃圾分类大法了吗?图像分类1分钟轻松解决
  8. python turtle画房子详细解释_Python turtle 绘图入门必知必会
  9. Web存储——Web SQL的使用(一)
  10. 【编译原理】 CS143 斯坦福大学公开课 第一周:简介
  11. 安全系列之一——SYS-VUL-0048漏洞
  12. 如何修改游戏服务器数据包,游戏数据包的定义
  13. mysql 1114错误_mysql cluster导表时报1114问题
  14. 【Python计量】异方差性的检验
  15. Java餐饮酒店管理系统PC端,使用SpringBoot、Layer,Beetl
  16. 7.scala初识 柯里化、隐式参数、隐式转换、视图边界、上界、下界、协变、逆变
  17. JAVA简单模拟商品购买,记录购买日志
  18. Android 程序员必须掌握的三种自动化测试方法
  19. 富文本中添加字体选项功能_扑中的字体功能
  20. c语言free函数的作用,c语言中free函数的理解

热门文章

  1. python自学课堂_python怎么自学要那本书
  2. servlet的注解开发
  3. excel合并计算_【Excel】合并计算和模拟分析的应用
  4. java 8 并行_Java 8新特性之 并行和并行数组(八恶人-8)
  5. ADI官方源码快速搭建demo工程验证设计的正确性
  6. sqlsever无法重新启动计算机,有关SqlServer 2008安装及卸载的一些问题,安装检测时显示重新启动计算机....
  7. 漫步者蓝牙驱动_2020年知乎最受欢迎的高性价比真无线蓝牙耳机推荐,轻松选择蓝牙耳机(9月最新)!...
  8. 555定时器,你知道它的功能有多强大吗?
  9. verilog出租车计价器
  10. java swt 不显示图片_Java SWT按钮图像未刷新