DHT抓取程序開源地址:https://github.com/h31h31/H31DHTDEMO
數據處理程序開源地址:https://github.com/h31h31/H31DHTMgr
國外測試服務器: http://h31bt.com 大家可以給提點意見...
--------------------------------------------------------------------------------------------------------------------
關於自動更新,在.NET下面已經是很普通的事情,無非就是在服務器端保存配置好要更新的程序,然後客戶端再寫一個小程序來檢測,有更新的則復制過來。
但現在問題是就一個程序,如何讓程序自己進行更新而不用調用另外的程序,對於用戶來說體驗更好.
1.首先程序exe自己下載覆蓋自己肯定是不行的,會報“當前程序正在被另一個進程所使用”的系統錯誤 2.在進程中的程序不能覆蓋自己,但是可以重命名,你從遠程下載一個新的exe文件,重命名為xxx.exe.tmp 3.待下載完畢後,把舊的exe重命名一下,比如xxx.exe.old,然後把新的xxx.exe.tmp重命名為xxx.exe 4.重命名的方法:System.IO.File.Move(filepath + ".tmp", filepath) 5.然後重啟程序Application.Restart() if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + @"xxx.exe.old""xxx.exe.old")這樣就可以了,如果做的再好點的話,可以把xxx.exe.old的文件屬性設置為隱藏就好了.
網上搜索的方法:
如果建一個bat文件,執行的是復制功能,然後再用一個bat來調用他,並且用一個bat文件去殺掉某一個文件,然後再復制新的,再啟動是沒有什麼問題的吧。
添加了一個方法KillSelfThenRun()用於刪除正在運行的主Exe,然後再重啟新的主Exe。代碼全部粘貼如下:
KillSelfThenRun
第三步調用時,原程序本身就有一個Try的做法,就在Catch裡面判斷一下,如果出現IOException,就調用這個方法。
點擊完成復制更新文件到應用程序目錄
先看使用方法:
在主程序界面裡面增加一個定時器,然後用來延時來判斷服務器上的程序是否有更新,如果在程序一開始就判斷,程序會加載很慢,從而給用戶體驗不好.
m_localPath = thisexename = Application.ExecutablePath.Replace(m_localPath, = isupdate == MessageBox.Show(, , (dlg ==
然後程序就會顯示更新進度條:
程序更新後將自己命令為*.old,然後使用MOVE命令將新的更新為自己.
服務器上的返回XML文件列表方式:
<?xml version= encoding= ?> <AutoUpdater> <UpdateInfo id=> <Version value = /> </UpdateInfo> <!--升級文件列表--> <UpdateFileList> <UpdateFile>software\H31Thunder.exe</UpdateFile>
<!--可以復制多行,更新自己目錄下面的程序-->
<UpdateFile>software\H31Thunder.exe</UpdateFile>
</UpdateFileList> </AutoUpdater>
如果大家有什麼更好的方法,請指教.謝謝.
下載程序:H31Thunder.rar
http://h31bt.com網址是不是自己服務器上的...