本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。
本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。
有時候不可避免的要建些Windows服務。既然寫代碼,就需要調試,由於這個東西搞的人不多,每個人調試的方法也不全,所以在下在這裡小結一下調試方法。
文件->新建項目->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方法體前面加個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 }
啟動服務後彈出如下:,然後選中對應的解決方案即可。


源碼下載
本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。