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
總結
以上是生活随笔為你收集整理的C# WINFORM的自动更新程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏开发中的数据表示
- 下一篇: C# 之 Math取整