天天看點

建立允許遠端更新的Windows服務

demo位址:

ServerAutoUpdate.rar

測試步驟:

1) 安裝ServerAutoUpdate.Server這個Windows服務,修改配置檔案中Web服務位址為ServerAutoUpdate.SelfUpdateWinSerive.MgrSite

2) 打開ServerAutoUpdate.SelfUpdateWinSerive.MgrSite,選擇一個服務,能看到已經有一個執行個體注冊了,上傳一個檔案(比如可以更新一下ServerAutoUpdat.ServerCore的版本号然後更新)

3) 過一段時間點選檢視更新結果可以看到服務端更新檔案的結果

基本原理:

1) 要讓Windows服務支援這種更新,隻需要在OnStart的時候調用SelfUpdateModule.Register(),以及在OnStop的時候調用SelfUpdateModule.UnRegister()。(當然需要引用ServerAutoUpdate.SelfUpdateWinSerive.dll),Register的時候,通路Web服務把服務自己進行注冊,在UnRegister的時候反注冊。

2) 在ServerAutoUpdate.SelfUpdateWinSerive.MgrSite網站中的App_Data中維護了一個所有活動Windows服務的清單,可以用于更新。

3) 更新的時候調用SelfUpdateModule中的一個Remoting服務,推方式把新的檔案推過去,服務端做到事情很簡單,把檔案儲存在本地,然後調用Process.Start開啟一個cmd,cmd執行暫停目前Windows服務的操作,然後更新檔案并且啟動服務(注意,由于服務重新開機,Remoting的這個服務隻能是OneWay)。

4) 服務重新開機之後,SelfUpdateModule.Register()方法中會檢查本地檔案夾下有無更新檔案夾,有的話調用Web服務通知更新結果,并且删除檔案夾。

5) 在ServerAutoUpdate.SelfUpdateWinSerive.MgrSite網站中這個更新批次(temp目錄下)的檔案夾中會多一個result.txt,檢視這個檔案可以看到所有執行個體的更新結果。

其實說了這麼多,更新的原理就是一句話“用Process.Start啟動一個bat更新檔案,否則本身很難更新本身依賴檔案”。

作者:

lovecindywang

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀