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 == 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、软件开发环境以及开发工具: 框架:.NET Framework 4.0 工具:Visual Studio 2017 插件:DevExpress 18.1.7 环境:IIS 7 二、实现步骤 (1)在项目中创建一个名为WinformAutoUpdate.APP的Winform窗体应用工程,并将默认的Form1.cs窗体文件重命名为MainFrm.cs作为主程序窗体 创建主程序窗体 (2)在项目中再创建一个名为AutoUpdateTask的Winform应用程序工程,并将默认的Form1.cs窗体文件重命名为AutoUpdateTaskFrm.cs作为更新程序窗体 创建更新程序窗体 (3)在更新程序窗体中放入图上所示的相关控件; 进度条控件用于显示更新进度,放入一个Button按钮控件用于用户根据提示进行操作! 实现思路: 1、将更新程序放入磁盘的目录下面,并将其放在已经发布了的IIS中 当用户在运行主程序窗体并点击左上角的更新按钮时,弹出程序更新窗体,并先自动从IIS中拉取updateList.xml文件,然后与本地程序作对比,检测是否需要升级软件; 如果有新版本发布,则点击“立即更新”按钮,程序将从IIS中拉取新发布的ZIP软件包,并自动解压到主程序目录中,覆盖主程序目录中的相关文件(这里值得注意的是,在解压程序之前,我们需要先结束主程序的进程,不然会因主程序进程正在使用而导致报错,另外,我们用到的插件是ICSharpCode.SharpZipLib.dll第三方动态链接库,网上有现成的,可以直接Down下来用);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值