关于NET windows软件实现自动更新本人今天写了一个DEMO供大家参考
大家先看下效果图
主要涉及到两个方面
更新软件主项目和DLL文件
升级包自身的更新
一个项目通常包括主项目和类库项目主项目就是启动项目以exe结尾类库项目主要是DLL 简单的说更新就是将软件本地的主项目和类库项目进行更新
可以采用将最新的软件放到一个远程服务器上然后每次启动本地软件时候检查如果有更新就从服务器上下载最新的EXE文件和DLL文件
来替换本地的DLL文件和exe文件
实现思路在本地和服务器上各放一个XML文件里面记录了软件版本号发布日期要更新的DLL等一些信息如果发现本地软件的版本号和服务器上的不相等或者
本地软件中的类库项目的发布时间比服务上的晚就开始下载服务器上的文件替换掉本地的文件
XML格式如下
<?xml version= encoding=utf?> <AutoUpdater> <AppName>WinUpdate</AppName> <ReleaseURL>;/ReleaseURL> <ReleaseDate>// ::</ReleaseDate> <ReleaseVersion></ReleaseVersion> <MinVersion></MinVersion> <UpdateDes> 添加打印菜单 增加DLL 增加关于模块 </UpdateDes> <ApplicationStart>WinUpdateexe</ApplicationStart> <ShortcutIcon>ico</ShortcutIcon> <Releases> <File name=AboutFormdll date=// :: size= /> </Releases> </AutoUpdater>
public static void DownloadFile(string localFolder string remoteFolder string fileName ProgressBar bar Label lblSize) { string url = remoteFolder + / + fileName; string path = localFolder+ fileName; string dir = PathGetDirectoryName(path); if (!DirectoryExists(dir)) DirectoryCreateDirectory(dir); WebRequest req = WebRequestCreate(url); WebResponse res = reqGetResponse(); if (resContentLength == ) return; long fileLength = resContentLength; string totalSize = FormatFileSizeDescription(barMaximum); using (Stream srm = resGetResponseStream()) { var srmReader = new StreamReader(srm); var bufferbyte = new byte[fileLength]; int allByte = bufferbyteLength; int startByte = ; while (fileLength > ) { int downByte = srmRead(bufferbyte startByte allByte); if (downByte == ) { break; } ; startByte += downByte; allByte = downByte; int progress = barValue + downByte; progress = progress > barMaximum ? barMaximum : progress; barValue = progress; lblSizeText = stringFormat(已完成{}/{} FormatFileSizeDescription(progress) totalSize); } var fs = new FileStream(path FileModeOpenOrCreate FileAccessWrite); fsWrite(bufferbyte bufferbyteLength); srmClose(); srmReaderClose(); fsClose(); } } }
关于升级包自身的更新采用如下思路在服务器上放置一个TXT文件里面存放着升级包的版本号每次本地软件启动的时候
读取服务器上TXT文件的版本号和本地升级包的版本信息进行比较如果不同就从服务器上下载升级包
关于下载本项目都是使用WebClient进行完成的
自己可以采用如下方式进行测试
首先在你的IIS下面建立一个虚拟目录此目录用来放置要更新的文件内容如下
ReleaseListxml和文件夹主要是实现软件更新
ReleaseListxml存放了需要更新的内容文件夹存放了需要更新的类库和文件
AutoUpdateexeUpdaterVersontxt这两个文件实现的升级包自身进行更新
AutoUpdateexe是升级包UpdaterVersontxt存放的是升级包的版本号
将以上内容部署到IIS下面