support mono restarts

This commit is contained in:
Luke Pulverenti 2015-05-23 18:01:13 -04:00
parent d0c9273d67
commit fb48dd3487
8 changed files with 102 additions and 11 deletions

View File

@ -146,6 +146,26 @@ namespace MediaBrowser.Server.Mac
MenuBarIcon.Instance.Terminate ();
}
public static void Restart()
{
_logger.Info("Disposing app host");
AppHost.Dispose();
_logger.Info("Starting new instance");
var currentProcess = Process.GetCurrentProcess();
var args = Environment.GetCommandLineArgs()
.Select(NormalizeCommandLineArgument);
var commandLineArgsString = string.Join(" ", args.ToArray());
Process.Start(currentProcess.MainModule.FileName, commandLineArgsString);
_logger.Info("AppController.Terminate");
MenuBarIcon.Instance.Terminate();
}
/// <summary>
/// Handles the UnhandledException event of the CurrentDomain control.
/// </summary>

View File

@ -19,16 +19,16 @@ namespace MediaBrowser.Server.Mac
/// <summary>
/// Restarts this instance.
/// </summary>
public void Restart()
public virtual void Restart()
{
throw new NotImplementedException();
}
/// <summary>
/// Determines whether this instance [can self restart].
/// </summary>
/// <returns><c>true</c> if this instance [can self restart]; otherwise, <c>false</c>.</returns>
public bool CanSelfRestart
public virtual bool CanSelfRestart
{
get
{

View File

@ -14,6 +14,26 @@ namespace MediaBrowser.Server.Mac
{
MainClass.Shutdown();
}
/// <summary>
/// Determines whether this instance [can self restart].
/// </summary>
/// <value><c>true</c> if this instance can self restart; otherwise, <c>false</c>.</value>
public override bool CanSelfRestart
{
get
{
return true;
}
}
/// <summary>
/// Restarts this instance.
/// </summary>
public override void Restart()
{
MainClass.Restart();
}
}
}

View File

@ -21,16 +21,16 @@ namespace MediaBrowser.Server.Mono.Native
/// <summary>
/// Restarts this instance.
/// </summary>
public void Restart()
public virtual void Restart()
{
throw new NotImplementedException();
}
/// <summary>
/// Determines whether this instance [can self restart].
/// </summary>
/// <returns><c>true</c> if this instance [can self restart]; otherwise, <c>false</c>.</returns>
public bool CanSelfRestart
public virtual bool CanSelfRestart
{
get
{

View File

@ -13,5 +13,25 @@ namespace MediaBrowser.Server.Mono.Native
{
MainClass.Shutdown();
}
/// <summary>
/// Determines whether this instance [can self restart].
/// </summary>
/// <value><c>true</c> if this instance can self restart; otherwise, <c>false</c>.</value>
public override bool CanSelfRestart
{
get
{
return true;
}
}
/// <summary>
/// Restarts this instance.
/// </summary>
public override void Restart()
{
MainClass.Restart();
}
}
}

View File

@ -1,4 +1,3 @@
using System.IO;
using MediaBrowser.Common.Implementations.IO;
using MediaBrowser.Common.Implementations.Logging;
using MediaBrowser.Model.Logging;
@ -8,6 +7,8 @@ using MediaBrowser.Server.Startup.Common;
using Microsoft.Win32;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Reflection;
@ -136,6 +137,36 @@ namespace MediaBrowser.Server.Mono
{
ApplicationTaskCompletionSource.SetResult (true);
}
public static void Restart()
{
_logger.Info("Disposing app host");
_appHost.Dispose();
_logger.Info("Starting new instance");
var currentProcess = Process.GetCurrentProcess();
var args = Environment.GetCommandLineArgs()
.Select(NormalizeCommandLineArgument);
var commandLineArgsString = string.Join(" ", args.ToArray());
Process.Start(currentProcess.MainModule.FileName, commandLineArgsString);
_logger.Info("Calling Environment.Exit");
Environment.Exit(0);
}
private static string NormalizeCommandLineArgument(string arg)
{
if (arg.IndexOf(" ", StringComparison.OrdinalIgnoreCase) == -1)
{
return arg;
}
return "\"" + arg + "\"";
}
}
class NoCheckCertificatePolicy : ICertificatePolicy

View File

@ -516,11 +516,11 @@ namespace MediaBrowser.ServerApplication
_logger.Info("Hiding server notify icon");
_serverNotifyIcon.Visible = false;
_logger.Info("Executing windows forms restart");
_logger.Info("Starting new instance");
//Application.Restart();
Process.Start(_appHost.ServerConfigurationManager.ApplicationPaths.ApplicationPath);
_logger.Info("Calling Application.Exit");
_logger.Info("Calling Environment.Exit");
Environment.Exit(0);
}
}

View File

@ -1,4 +1,4 @@
using System.Reflection;
//[assembly: AssemblyVersion("3.0.*")]
[assembly: AssemblyVersion("3.0.5621.0")]
[assembly: AssemblyVersion("3.0.5621.1")]