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.