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檢驗


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM