Brad Corbin's Blog

.Net and CRM Reflections of a Reformed Procedural Coder

  Home  |   Contact  |   Syndication    |   Login
  10 Posts | 0 Stories | 1 Comments | 8 Trackbacks

News



Archives

Post Categories

Mark Pearce describes how to debug a .Net Windows service from Visual Studio:

To do this, you need to emulate what the Service Control Manager (SCM) does when it starts your service — in other words, invoke your service’s OnStart method. In VB, this looks like:

    ' The main entry point for the process
     _
    
Shared Sub Main()
#
If DEBUG Then
        Dim DebugService As New ServiceAdmin
        DebugService.OnStart(
Nothing)
#
Else
        Dim ServicesToRun() As System.ServiceProcess.ServiceBase
        ServicesToRun = New System.ServiceProcess.ServiceBase() {New ServiceAdmin()}
        System.ServiceProcess.ServiceBase.Run(ServicesToRun)
#
End If
    End Sub

Cool stuff.

One caveat: if all you do in your OnStart event is start a timer, then the application will terminate immediately. You have to give it something to hold the application open while you are debugging. This is cheezy, but works:

Protected Overrides Sub OnStart(ByVal args() As String)
    Timer1.Interval = 1000
    MessageBox.Show("Click OK to stop the service.")
    Timer1.Enabled =
True
End Sub

The service will run as long as the Message box stays open.

posted on Tuesday, November 29, 2005 1:40 PM

Feedback

# re: Debugging a .Net Windows Service the "easy way" 11/29/2005 10:17 PM Szymon
Better yet add a command line switch to run your service in console mode. This way you can yeasily debug it even on production setup.

# re: Debugging a .Net Windows Service the "easy way" 11/29/2005 10:22 PM Szymon
Ok now I see the problem you are trying to solve. What I do is to attach SetConsoleCtrlHandler (DllImport("kernel32.dll")) to catch console control events and run the service in another thread. Then I use a monitor to synchronize. I learned this from CC.NET service so you can take a look there.

Post A Comment
Title:
Name:
Email:
Website:
Comment:
Verification: