本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。
閱讀目錄
本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。
介紹
有時候不可避免的要建些Windows服務。既然寫程式碼,就需要除錯,由於這個東西搞的人不多,每個人除錯的方法也不全,所以在下在這裡小結一下除錯方法。
搭建環境
一:建立一個Window Service
檔案->新建專案->Windows 服務。
然後我們直接執行試試,然後提示如下:
好吧,我們就依他的意思,加個服務安裝程式和些相關的引用及其他,結果如下:
這樣我們的環境就基本搭建好了,然後就是服務的安裝,執行bin\Debug\Install\install.bat即可。
除錯方式
一:普通除錯
msdn上指出“必須從服務控制管理器的上下文中而不是 Visual Studio 中執行服務。 因此,除錯服務不像除錯其他 Visual Studio 應用程式型別一樣簡單。 要除錯服務,必須啟動該服務,然後將偵錯程式附加到該服務正在其中執行的程式中。 然後你可以使用所有 Visual Studio 的標準除錯功能來除錯你的應用程式”。
所以我們啟動服務,然後通過vs附件該服務程式,然後就可以除錯了。如下:
二:特殊除錯
如果我們不想建立服務就想除錯程式碼,其實可以採用其他的替代方式進行,只不過要改程式碼。
我們找到程式的入口:Program.cs。
原始碼如下:
1 static class Program 2 { 3 /// <summary> 4 /// 應用程式的主入口點。 5 /// </summary> 6 static void Main() 7 { 8 ServiceBase[] ServicesToRun; 9 ServicesToRun = new ServiceBase[] 10 { 11 new ServiceDebug() 12 }; 13 ServiceBase.Run(ServicesToRun); 14 } 15 }
修改後程式碼如下:
1 protected override void OnStart(string[] args) 2 { 3 Timer timer = new Timer(); 4 timer.Interval = 1000; 5 timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); 6 timer.Start(); 7 8 } 9 10 private void timer_Elapsed(object sender, ElapsedEventArgs e) 11 { 12 13 } 14 15 protected override void OnStop() 16 { 17 } 18 19 public void Test(string[] args) 20 { 21 OnStart(args); 22 }
1 static class Program 2 { 3 /// <summary> 4 /// 應用程式的主入口點。 5 /// </summary> 6 static void Main() 7 { 8 ServiceDebug service = new ServiceDebug(); 9 service.Test(null); 10 11 while (true) 12 { 13 System.Threading.Thread.Sleep(1000); 14 } 15 return; 16 17 ServiceBase[] ServicesToRun; 18 ServicesToRun = new ServiceBase[] 19 { 20 new ServiceDebug() 21 }; 22 ServiceBase.Run(ServicesToRun); 23 } 24 }
這樣,我們就可以進行除錯了。
二:OnStart常規除錯
有時候我們想正常的除錯Onstart方法,但是,啟動服務後這個方法已經執行了,那麼我們應該怎麼除錯捏。
我們可以在Onstart方法體前面加個Debugger.Launch();就可以很愉快的除錯了。如下:
1 protected override void OnStart(string[] args) 2 { 3 Debugger.Launch(); 4 5 Timer timer = new Timer(); 6 timer.Interval = 1000; 7 timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); 8 timer.Start(); 9 10 }
啟動服務後彈出如下:,然後選中對應的解決方案即可。
Demo下載
本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。