3

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
  • 7,015
  • 12
  • 47
  • 75
Denish
  • 983
  • 1
  • 13
  • 20

4 Answers4

12

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
  • 18,404
  • 16
  • 78
  • 126
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
  • 41,277
  • 16
  • 94
  • 144
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
  • 171,043
  • 40
  • 335
  • 443
0

If you need to debug it without installing , In Program.cs class add below lines and make a breakpoint in function , then click F5

static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new Service1()
        };
        ServiceBase.Run(ServicesToRun);

         Service1 myService = new Service1();
         myService.CallMethodNeedDebuging();
    }
Aya Osama
  • 51
  • 2