diff options
Diffstat (limited to 'MediaBrowser.ServerApplication/MainStartup.cs')
| -rw-r--r-- | MediaBrowser.ServerApplication/MainStartup.cs | 60 |
1 files changed, 54 insertions, 6 deletions
diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index 2c11f8337..e9c1fdc99 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -27,6 +27,10 @@ namespace MediaBrowser.ServerApplication private static App _app; + private static BackgroundService _backgroundService; + + private static ILogger _logger; + /// <summary> /// Defines the entry point of the application. /// </summary> @@ -41,7 +45,7 @@ namespace MediaBrowser.ServerApplication var logManager = new NlogManager(appPaths.LogDirectoryPath, "server"); logManager.ReloadLogger(LogSeverity.Info); - var logger = logManager.GetLogger("Main"); + var logger = _logger = logManager.GetLogger("Main"); BeginLog(logger); @@ -187,6 +191,8 @@ namespace MediaBrowser.ServerApplication service.Disposed += service_Disposed; ServiceBase.Run(service); + + _backgroundService = service; } /// <summary> @@ -294,10 +300,10 @@ namespace MediaBrowser.ServerApplication /// <param name="e">The <see cref="SessionEndingEventArgs"/> instance containing the event data.</param> static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) { - // Try to shutdown gracefully - var task = _appHost.Shutdown(); - - Task.WaitAll(task); + if (e.Reason == SessionEndReasons.SystemShutdown || _backgroundService == null) + { + Shutdown(); + } } /// <summary> @@ -309,7 +315,10 @@ namespace MediaBrowser.ServerApplication { var exception = (Exception)e.ExceptionObject; - _app.OnUnhandledException(exception); + if (_backgroundService == null) + { + _app.OnUnhandledException(exception); + } if (!Debugger.IsAttached) { @@ -365,5 +374,44 @@ namespace MediaBrowser.ServerApplication return false; } + + public static void Shutdown() + { + if (_backgroundService != null) + { + _backgroundService.Stop(); + } + else + { + _app.Dispatcher.Invoke(_app.Shutdown); + } + } + + public static void Restart() + { + // Second instance will start first, so release the mutex and dispose the http server ahead of time + _app.Dispatcher.Invoke(() => ReleaseMutex(_logger)); + + _appHost.Dispose(); + + RestartInternal(); + + _app.Dispatcher.Invoke(_app.Shutdown); + } + + private static void RestartInternal() + { + if (_backgroundService == null) + { + System.Windows.Forms.Application.Restart(); + } + else + { + //var controller = new ServiceController() + //{ + // ServiceName = BackgroundService.Name + //}; + } + } } } |
