2011-08-09 89 views
2

我想調試窗口服務。我應該在main()中寫入以在窗口服務中啓用調試。我正在開發使用C#的窗口服務。調試窗口服務

#if(DEBUG) 
     System.Diagnostics.Debugger.Break(); 
     this.OnStart(null); 
     System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); 
#else 
     ServiceBase.Run(this); 
#endif 

我寫上面的代碼段,但上線(這

+0

您的問題尚未完成。 –

+0

可能[重複](http://stackoverflow.com/questions/125964/easier-way-to-start-debugging-a-windows-service-in-c)。 –

回答

0

我會做這樣的:
在服務的OnStart方法調用在頂部加入到Debugger.Break()

protected override void OnStart(string[] args) 
{ 
    #if DEBUG 
     Debugger.Break(); 
    #endif 

    // ... the actual code 
} 
2

試試這個:

#if DEBUG 
while (!System.Diagnostics.Debugger.IsAttached) 
{ 
    Thread.Sleep(1000); 
} 
System.Diagnostics.Debugger.Break(); 
#endif 

等待直到你附加一個調試器,然後休息。

10

我個人使用這個方法來調試Windows服務:

static void Main() { 

    if (!Environment.UserInteractive) { 
     // We are not in debug mode, startup as service 

     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] { new MyServer() }; 
     ServiceBase.Run(ServicesToRun); 
    } else { 
     // We are in debug mode, startup as application 

     MyServer service = new MyServer(); 
     service.StartService(); 
     System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); 
    } 
} 

,並創建你的MyServer類的新方法,該方法將使用OnStart事件:

public void StartService() { 
    this.OnStart(new string[0]); 
}