一、前言 這周除了改寫一些識別演算法外,繼續我的Socket服務編寫。伺服器端的Socket服務是以Windows Service的形式運行的。 在我完成Windows Service編寫後,啟動服務時總是出現錯誤,這裡我總結下如何安裝、啟動及排查故障。 二、正文 先說說Windows Service ...
一、前言
這周除了改寫一些識別演算法外,繼續我的Socket服務編寫。伺服器端的Socket服務是以Windows Service的形式運行的。
在我完成Windows Service編寫後,啟動服務時總是出現錯誤,這裡我總結下如何安裝、啟動及排查故障。
二、正文
先說說Windows Service的安裝,這是最基礎的。當你編寫完Windows Service後,通常要執行一段腳本,腳本與Windows Service應用在同一目錄下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe UpdaterService.exe //UpdaterService為Service應用程式 Net Start SocketService //SocketService為Service名稱 sc config SocketService start = auto pause
當腳本執行時出現服務啟動失敗(1053-服務沒有及時響應啟動或控制請求)時,說明你的應用有問題了。
首先要檢查下Windows Service應用的dll是否完整,有沒有遺漏。
然後如果是編譯成功的,看下自己的Service代碼是否運行在一個線程里:
using System; using System.IO; using System.ServiceProcess; using System.Threading; using System.Threading.Tasks; namespace UpdaterService { public partial class SocketService : ServiceBase { Thread threadforwork = null; public SocketService() { InitializeComponent(); } protected override void OnStart(string[] args) { if (threadforwork == null) { threadforwork = new Thread(p => { try { //Your Service } catch (Exception ex) { //Log Here } }); threadforwork.IsBackground = true; threadforwork.Start(); } } protected override void OnStop() { if (threadforwork?.ThreadState == ThreadState.Running) { threadforwork.Abort(); } } } }
順利安裝完Windows Service後如果需要卸載則,執行另一腳本,同樣卸載腳本與Windows Service應用也在同一目錄下:
net stop SocketService %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u UpdaterService.exe pause
如果你想刪除這個Windows Service應用所在目錄時,正常情況下是可以完全刪除的。
但是有時候卻不能完全刪除,提示你當前程式被占用,無法刪除。這種情況一般發生在安裝服務成功,啟動服務失敗的時候,你去卸載就不能完全卸載乾凈。
你需要運行命令行去刪除乾凈:
sc queryex ServiceName //這時會顯示服務的PID taskkill /PID ServicePID /f
當命令行顯示已成功刪除PID之後,你就可以刪除應用所在目錄了。
三、結語
這周科目二考試居然掛了,平時練得各種順利,進考場有點懵,居然在倒車入庫就屁股頂線兩次,真是神奇!奇怪的是,掛了之後心情卻異常的好,感覺整個人都突然好了。前幾周睡眠不太好,總失眠。掛了之後居然每天都睡的很香,在公司吃飯胃口也好了很多,可能這是命中註定的事吧。線上升級程式也快搞完了,可以做壓力測試了。下次定能在神明的保佑下考過科目二!阿門,阿彌陀佛,阿拉胡阿克巴!