瀏覽代碼

support mono restarts

Luke Pulverenti 10 年之前
父節點
當前提交
fb48dd3487

+ 20 - 0
MediaBrowser.Server.Mac/Main.cs

@@ -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>

+ 3 - 3
MediaBrowser.Server.Mac/Native/BaseMonoApp.cs

@@ -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
             {

+ 21 - 1
MediaBrowser.Server.Mac/Native/NativeApp.cs

@@ -13,7 +13,27 @@ namespace MediaBrowser.Server.Mac
 		public override void Shutdown()
 		{
 			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();
+        }
 	}
 }
 

+ 3 - 3
MediaBrowser.Server.Mono/Native/BaseMonoApp.cs

@@ -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
             {

+ 20 - 0
MediaBrowser.Server.Mono/Native/NativeApp.cs

@@ -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();
+        }
     }
 }

+ 32 - 1
MediaBrowser.Server.Mono/Program.cs

@@ -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

+ 2 - 2
MediaBrowser.ServerApplication/MainStartup.cs

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

+ 1 - 1
SharedVersion.cs

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