2014年1月20日 星期一

Windows Service 遠端偵錯方式

通常在本機開發的時後都是沒有問題的,會發生問題都是佈署到正式環境後才會發生="=
而用一般遠端偵錯的方式,都是已經啟動服務成功才能下中斷點
如果問題出在啟動失敗的話,就中斷不到
這種情境可以加入System.Diagnostics.Debugger.Launch();
讓應用程式等待偵錯工具的連入後才會繼續執行下去
using System.ServiceProcess;

namespace MyService
{
    public partial class Service1 : ServiceBase
    {
        private NowTimeReporter reporter = new NowTimeReporter();

        public Service1()
        {
            InitializeComponent();

            // 偵錯中斷用
            System.Diagnostics.Debugger.Launch();
        }

        protected override void OnStart(string[] args)
        {
            this.reporter.Start();
        }

        protected override void OnStop()
        {
            this.reporter.Stop();
        }
    }
}

執行start.bat來啟動服務
net start Service1

就會跳出選擇偵錯工具的畫面,這裡先不選擇

回到本機,選擇工具->附加執行緒,選擇遠端和輸入IP,再選擇執行檔,然後附加就行了

到Server中上放開偵錯工具選擇畫面


就會停在System.Diagnostics.Debugger.Launch();這一行

在本機也可以用這種偵錯方式,就不用到應用程式進入點去動手腳
只要讓服務啟動,再選擇偵錯工具連入就行了