C# WINFORM的自动更新程序
自动更新程序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 == ) && (!MainProgRunned))
{
try
{
Process proc = Process.GetCurrentProcess();
string curProcess = proc.ProcessName.ToUpper();
if (Common.AutoUpdateFunc.NeedUpdate && curProcess.IndexOf("VSHOST") < )
{
new BIN.AutoUpdateFunc("UpdateList.xml")).InvokeAutoUpdate();
}
}
catch (Exception ex)
{ }
}
Common.ProgRunned("AutoUpate.exe", true); //杀死自动更新程序
//启动主界面
另外,下载文件没有加MD5检验
C# WINFORM的自动更新程序的更多相关文章
- winform 通用自动更新程序
通用自动更新程序 主要功能: 1. 可用于 C/S 程序的更新,集成到宿主主程序非常简单和配置非常简单,或不集成到主程序独立运行. 2. 支持 HTTP.FTP.WebService等多种更新下载方式 ...
- winform自动更新程序实现
一.问题背景 本地程序在实际项目使用过程中,因为可以操作电脑本地的一些信息,并且对于串口.OPC.并口等数据可以方便的进行收发,虽然现在软件行业看着动不动都是互联网啊啥的,大有Web服务就是高大上的感 ...
- SNF开发平台WinForm之八-自动升级程序部署使用说明-SNF快速开发平台3.3-Spring.Net.Framework
9.1运行效果: 9.2开发实现: 1.首先配置服务器端,把“SNFAutoUpdate2.0\服务器端部署“目录按网站程序进行发布到IIS服务器上. 2.粘贴语句,生成程序 需要调用的应用程序的Lo ...
- WinForm通用自动更新器AutoUpdater项目实战
一.项目背景介绍 最近单位开发一个项目,其中需要用到自动升级功能.因为自动升级是一个比较常用的功能,可能会在很多程序中用到,于是,我就想写一个自动升级的组件,在应用程序中,只需要引用这个自动升级组件, ...
- 使用 advanced installer 为 winform 做自动更新
原文:使用 advanced installer 为 winform 做自动更新 advanced installer 是一款打包程序,基于 windows installer 并扩展了一些功能,比如 ...
- C#[WinForm]实现自动更新
C#[WinForm]实现自动更新 winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个 ...
- C#之tcp自动更新程序
.NETTCP自动更新程序有如下几步骤: 第一步:服务端开启监听 ServiceHost host; private void button1_Click(object sender, EventAr ...
- ASP.NET网站版本自动更新程序及代码[转]
1.自动更新程序主要负责从服务器中获取相应的更新文件,并且把这些文件下载到本地,替换现有的文件.达到修复Bug,更新功能的目的.用户手工点击更新按钮启动更新程序.已测试.2.环境VS2008,采用C# ...
- winform实现自动更新并动态调用form实现
winform实现自动更新并动态调用form实现 标签: winform作业dllbytenull服务器 2008-08-04 17:36 1102人阅读 评论(0) 收藏 举报 分类: c#200 ...
随机推荐
- centos-7安装redis服务
一.Redis下载 在centOS里通过wget下载redis wget http://download.redis.io/releases/redis-4.0.11.tar.gz 具体版本下载地址 ...
- ZYNQ. LwIP.PHY.KSZ9031RNX
新一块板子 米尔科技的 z-turn 使用的PHY芯片是Micrel的 KSZ9031RNX 而不是zedboard上的Marvell的. 直接使用lwip的echo server demo时会报错 ...
- consul服务发现和配置共享的软件,
Consul 是什么 consul是一个支持多数据中心分布式高可用服务发现和配置共享的服务软件,由HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2. ...
- 树莓派编译安装opencv3 (2019.1.6更新)
一.更新系统 sudo apt-get update sudo apt-get upgrade sudo rpi-update #重启系统 sudo reboot 二.安装依赖库及程序 sudo ap ...
- java虚拟机规范(se8)——java虚拟机结构(五)
2.10 异常 java虚拟机中的异常用Throwable类或者它的子类的实例来表示.抛出一个异常会导致立即非本地(an inmediate nolocal)的控制转移,从发生异常的地方跳到处理异常的 ...
- .NetCore使用Swagger进行单版本或多版本控制处理
前面已经介绍过了Swagger的基础使用了 下面继续分别详细说明下 不添加版本控制以及添加版本控制的使用情况,其实也基本一致,对看起来可能更加容易理解 第一步 导入nuget包 nuget导入Swas ...
- Codeforces 1028E Restore Array 构造
我发现我构造题真的不会写, 想了好久才想出来.. 我们先把n = 2, 所有数字相等, 所有数字等于0的都特判掉. 找到一个b[ i ] > b[ i - 1 ]的位置把它移到最后一个位置, 并 ...
- HDU4632 Poj2955 括号匹配 整数划分 P1880 [NOI1995]石子合并 区间DP总结
题意:给定一个字符串 输出回文子序列的个数 一个字符也算一个回文 很明显的区间dp 就是要往区间小的压缩! #include<bits/stdc++.h> using namesp ...
- P1280 尼克的任务 线性DP
题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从第一分钟开始 ...
- 搭建微信小程序基本的https与wss环境
年底了写一篇小程序环境搭建的文章, 主要是怎么搭建一个线上环境以及怎么不改动原有http Api的情况 1.准备工作 域名一个 免费证书(推荐: 腾讯云.阿里云.便宜ssl 都是免费的 配置好后先将证 ...