/// <summary> /// Starts the service as service process or user interactive commandline program. In user interactive mode a logconsole is created to receive messages. /// In service mode an eventlog is used. /// </summary> public void Run() { try { Init(); if (IsWindowsService) { Run(this); return; } if (SystemConsole.IsConsoleAvailable && SystemConsole.CanReadKey) { SystemConsole.SetKeyPressedEvent(OnKeyPressed); } // run commandline CommandLineRun(); } catch (Exception ex) { log.LogEmergency(ex, "Unhandled exception:\n" + ex.ToXT()); } finally { // force stop if not already stopped / set stopped flag at service if (IsWindowsService) { Stop(); } Logger.Flush(); Logger.Close(); SystemConsole.RemoveKeyPressedEvent(); if (Debugger.IsAttached) { Thread.Sleep(1000); SystemConsole.WriteLine("--- Press <yellow>enter<default> to exit ---"); SystemConsole.ReadLine(); } } }