用C#開發(fā)軟件自動更新程序_第1頁
用C#開發(fā)軟件自動更新程序_第2頁
用C#開發(fā)軟件自動更新程序_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、用C跤現(xiàn)在線升級的關(guān)鍵步驟這里我主要使用日期信息來檢測是否需要下載升級版本。4.1 準(zhǔn)備一個XML配置文件名稱為AutoUpdater.xml,作用是作為一個升級用的模板,顯示需要升級的信息。名稱為AutoUpdater.xml,作用是作為一個升級用的模板,顯示需要升級的信息。<?xmlversion="1.0"?>/xml版本號<AutoUpdater><URLAddresURL="13/vbroker/log/"/>升級文件所在服務(wù)器端的網(wǎng)址<UpdateInfo>

2、<UpdateTimeDate="2005-02-02"/>/升級文件的更新日期<VersionNum=""/>/升級文件的版本號</UpdateInfo><UpdateFileList>/升級文件列表<UpdateFileFileName="aa.txt"/>/共有三個文件需升級<UpdateFileFileName="VB40.rar"/><UpdateFileFileName="VB4-1.CAB"

3、/></UpdateFileList><RestartApp><ReStartAllow="Yes"/>/允許重新啟動應(yīng)用程序<AppNameName="TIMS.exe"/>/啟動的應(yīng)用程序名</RestartApp></AutoUpdater>從以上XML文檔中可以得知升級文檔所在服務(wù)器端的地址、升級文檔的更新日期、需要升級的文件列表,其中共有三個文件需升級:aa.txt、VB40.rar、VB4-1.CAB。以及是否允許重新啟動應(yīng)用程序和重新啟動的應(yīng)用程序4.2 獲取客戶

4、端應(yīng)用程序及服務(wù)器端升級程序的最近一次更新日期通過GetTheLastUpdateTime()函數(shù)來實現(xiàn)。privatestringGetTheLastUpdateTime(stringDir)stringLastUpdateTime=""stringAutoUpdaterFileName=Dir+"AutoUpdater.xml"if(!File.Exists(AutoUpdaterFileName)returnLastUpdateTime;/打開xml文件FileStreammyFile=newFileStream(AutoUpdaterFileNa

5、me,FileMode.Open);/xml文件閱讀器XmlTextReaderxml=newXmlTextReader(myFile);while(xml.Read()if(xml.Name="UpdateTime")/獲取升級文檔的最后一次更新日期LastUpdateTime=xml.GetAttribute("Date");break;xml.Close();myFile.Close();returnLastUpdateTime;通過XmlTextReader打開XML文檔,讀取更新時間從而獲取Date對應(yīng)的值,即服務(wù)器端升級文件的最近一次更新時間

6、。函數(shù)調(diào)用實現(xiàn):/獲取客戶端指定路徑下的應(yīng)用程序最近一次更新時間stringthePreUpdateDate=GetTheLastUpdateTime(Application.StartupPath);Application.StartupPath指客戶端應(yīng)用程序所在的路徑。/獲得從服務(wù)器端已下載文檔的最近一次更新日期stringtheLastsUpdateDate=GetTheLastUpdateTime(theFolder.FullName);theFolder.FullName指在升級文檔下載到客戶機上的臨時文件夾所在的路徑。4.3 比較日期客戶端應(yīng)用程序最近一次更新日期與服務(wù)器端升級程

7、序的最近一次更新日期進(jìn)行比較。/獲得已下載文檔的最近一次更新日期stringtheLastsUpdateDate=GetTheLastUpdateTime(theFolder.FullName);if(thePreUpdateDate!="")/如果客戶端將升級的應(yīng)用程序的更新日期大于服務(wù)器端升級的應(yīng)用程序的更新日期if(Convert.ToDateTime(thePreUpdateDate)>=Convert.ToDateTime(theLastsUpdateDate)MessageBox.Show("當(dāng)前軟件已經(jīng)是最新的,無需更新!",&quo

8、t;系統(tǒng)提示”,MessageBoxButtons.OK,MessageBoxIcon.Information);this.Close();this.labDownFile.Text="下載更新文件"this.labFileName.Refresh();this.btnCancel.Enabled=true;gressBar.Position=0;gressBarTotal.Position=0;gressBarTotal.Refresh();gressBar.Refresh();/通過動態(tài)數(shù)組獲取下載文件的列

9、表ArrayListList=GetDownFileList(GetTheUpdateURL(),theFolder.FullName);stringurls=newstringList.Count;List.CopyTo(urls,0);將客戶端升級的應(yīng)用程序的日期與服務(wù)器端下載的應(yīng)用程序日期進(jìn)行比較,如果前者大于后者,則不更新;如果前者小于后者,則通過動態(tài)數(shù)組獲取下載文件的列表,開始下載文件。通過BatchDownload()函數(shù)來實現(xiàn)。升級程序檢測舊的主程序是否活動,若活動則關(guān)閉舊的主程序;刪除舊的主程序,拷貝臨時文件夾中的文件到相應(yīng)的位置;檢查主程序的狀態(tài),若狀態(tài)為活動的,則啟動新的主

10、程序。privatevoidBatchDownload(objectdata)(this.Invoke(this.activeStateChanger,newobjecttrue,false);tryDownloadInstructionsinstructions=(DownloadInstructions)data;/批量下載using(BatchDownloaderbDL=newBatchDownloader()bDL.CurrentProgressChanged+=newDownloadProgressHandler(this.SingleProgressChanged);bDL.Sta

11、teChanged+=newDownloadProgressHandler(this.StateChanged);bDL.FileChanged+=newDownloadProgressHandler(bDL_FileChanged);bDL.TotalProgressChanged+=newDownloadProgressHandler(bDL_TotalProgressChanged);bDL.Download(instructions.URLs,instructions.Destination,(ManualResetEvent)this.cancelEvent);catch(Excep

12、tionex)ShowErrorMessage(ex);this.Invoke(this.activeStateChanger,newobjectfalse,false);this.labFileName.Text=""/更新程序if(this._Update)/關(guān)閉原有的應(yīng)用程序this.labDownFile.Text="正在關(guān)閉程序.”;System.Diagnostics.Processproc=System.Diagnostics.Process.GetProcessesByName("TIMS");/關(guān)閉原有應(yīng)用程序的所有進(jìn)程for

13、each(System.Diagnostics.Processproinproc)pro.Kill();DirectoryInfotheFolder=newDirectoryInfo(Path.GetTempPath()+"JurassicUpdate");if(theFolder.Exists)foreach(FileInfotheFileintheFolder.GetFiles()/如果臨時文件夾下存在與應(yīng)用程序所在目錄下的文件同名的文件,則刪除應(yīng)用程序目錄下的文件if(File.Exists(Application.StartupPath+"+Path.GetFileName(theFile.FullName)File.Delete(Application.StartupPath+""+Path.GetFileName(theFile.FullName);/將臨時文件夾的文件移到應(yīng)用程序所在的目錄下);File.Move(theFile.FullName,Ap

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論