/// <summary> /// Démarre le service depuis le gestionnaire de services. /// </summary> /// <param name="serviceType"></param> private static void RunService(Type serviceType) { try { TraceServiceStart(serviceType, "Service"); try { DebuggableService service = new DebuggableService(serviceType); service.ServiceName = serviceType.ToString(); try { ServiceBase.Run(new ServiceBase[] { service }); } catch (Exception e) { log.Error("# Arrêt du service suite à une erreur non gérée.", e); service.Crash(e); } } catch (Exception e) { log.Error("# Arrêt du service: Impossible d'initialiser l'instance.", e); } TraceServiceStop(serviceType); } catch (Exception e) { string message = "#------------------------------------------" + Environment.NewLine + "# Une erreur non gérée a interrompu le démarrage du service." + Environment.NewLine + "# Service : " + serviceType.ToString() + " [" + Application.ExecutablePath + "]" + Environment.NewLine + e.ToString() + Environment.NewLine + "#------------------------------------------"; EventLog eventLog = new EventLog(); eventLog.Source = Path.GetFileNameWithoutExtension(Application.ExecutablePath); eventLog.Log = "Application"; eventLog.WriteEntry(message, EventLogEntryType.Error); } }
/// <summary> /// Démarre le service depuis la console (en mode debug) /// </summary> /// <param name="serviceType"></param> private static void RunDebug(Type serviceType) { try { TraceServiceStart(serviceType, "Debug"); try { DebuggableService service = new DebuggableService(serviceType); service.ServiceName = serviceType.ToString(); try { service.StartDebug(); Console.TreatControlCAsInput = true; while (true) { if (Console.KeyAvailable) { ConsoleKeyInfo cki = Console.ReadKey(true); if ((cki.Key == ConsoleKey.C) && ((cki.Modifiers & ConsoleModifiers.Control) != 0)) { log.Info("Control-C intercepté..."); service.StopDebug(); } } else { if (service.WaitForEnding(TimeSpan.FromMilliseconds(200))) break; } } } catch (Exception e) { log.Error("# Arrêt du service suite à une erreur non gérée.", e); service.Crash(e); } } catch (Exception e) { log.Error("# Arrêt du service: Impossible d'initialiser l'instance.", e); } TraceServiceStop(serviceType); } catch (Exception e) { string message = "#------------------------------------------" + Environment.NewLine + "# Une erreur non gérée a interrompu le démarrage du service." + Environment.NewLine + "# Service : " + serviceType.ToString() + " [" + Application.ExecutablePath + "]" + Environment.NewLine + e.ToString() + Environment.NewLine + "#------------------------------------------"; } }