2

I want to debug window service. What should i write in main() to enable debugging in window service. I am developing window service using C#.

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

i wrote above code segment but on line (this

Rami Alshareef
  • 6,554
  • 11
  • 40
  • 73
Denish
  • 971
  • 1
  • 12
  • 20

3 Answers3

11

I personally use this method to debug a Windows service:

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);
    }
}

And create a new method in your MyServer class that will use the OnStart event:

public void StartService() {
    this.OnStart(new string[0]);
}
Otiel
  • 17,292
  • 13
  • 70
  • 120
2

Try this:

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

It waits until you attach a debugger, then breaks.

Kieren Johnstone
  • 38,866
  • 13
  • 82
  • 137
0

I would do it like this:
In your service's OnStart method add the call to Debugger.Break() at the top:

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

    // ... the actual code
}
Daniel Hilgarth
  • 159,901
  • 39
  • 297
  • 411