Windows Services: OnStart() debuggen

Einen Windows Service zu debuggen ist eigentlich recht einfach: Service starten, Visual Studio an den Prozess anhängen, fertig. Das funktioniert allerdings nicht ohne Weiteres bei der OnStart()-Methode, da diese beim Dienststart durchlaufen wird. Das Debugging kann hier auf zwei Arten erreicht werden:
1. Pausieren des Prozesses mittels Thread.Sleep()


        protected override void OnStart(string[] args)
        {
            Thread.Sleep(20000);
            Timer tTimer = new Timer(1000);
            tTimer.Elapsed += tTimer_Elapsed;
            tTimer.Start();
        }

2. Aufrufen des Debuggers mittels Debugger.Launch()


        protected override void OnStart(string[] args)
        {
            Debugger.Launch();
            Timer tTimer = new Timer(1000);
            tTimer.Elapsed += tTimer_Elapsed;
            tTimer.Start();
        }

Ich persönlich bevorzuge die 2. Methode, da man zum einen nicht erst warten muss, bis Thread.Sleep() beendet wird, zum anderen spart man sich das manuelle Anhängen an den Prozess. Der Aufruf von Debugger.Launch() sorgt dafür, dass man per Dialog eine neue Visual Studio Instanz öffnen kann, die dann zum Debuggen genutzt wird. Allerdings sollte man darauf achten, dass man den Aufruf nur dann tätigt, wenn man auch wirklich debuggen will. Dies kann beispielsweise per Kommandozeilenparameter durchgeführt werden.


Kick It auf dotnet-kicks.de

Leave a Reply

Your email address will not be published.


*