|
|
|
@ -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
|
|
|
|
|
//};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|