Selaa lähdekoodia

fixes #166 - Multiple instance crash.

Luke Pulverenti 12 vuotta sitten
vanhempi
sitoutus
57dd61d209
1 muutettua tiedostoa jossa 24 lisäystä ja 20 poistoa
  1. 24 20
      MediaBrowser.ServerApplication/App.xaml.cs

+ 24 - 20
MediaBrowser.ServerApplication/App.xaml.cs

@@ -24,12 +24,27 @@ namespace MediaBrowser.ServerApplication
     /// </summary>
     public partial class App : Application
     {
+        /// <summary>
+        /// The single instance mutex
+        /// </summary>
+        private static Mutex _singleInstanceMutex;
+
         /// <summary>
         /// Defines the entry point of the application.
         /// </summary>
         [STAThread]
         public static void Main()
         {
+            bool createdNew;
+
+            _singleInstanceMutex = new Mutex(true, @"Local\" + typeof(App).Assembly.GetName().Name, out createdNew);
+            
+            if (!createdNew)
+            {
+                _singleInstanceMutex = null;
+                return;
+            }
+
             // Look for the existence of an update archive
             var appPaths = new ServerApplicationPaths();
             var updateArchive = Path.Combine(appPaths.TempUpdatePath, Constants.MbServerPkgName + ".zip");
@@ -66,11 +81,6 @@ namespace MediaBrowser.ServerApplication
             }
         }
 
-        /// <summary>
-        /// The single instance mutex
-        /// </summary>
-        private Mutex SingleInstanceMutex;
-
         /// <summary>
         /// Gets or sets the logger.
         /// </summary>
@@ -107,15 +117,6 @@ namespace MediaBrowser.ServerApplication
         /// <param name="e">A <see cref="T:System.Windows.StartupEventArgs" /> that contains the event data.</param>
         protected override void OnStartup(StartupEventArgs e)
         {
-            bool createdNew;
-            SingleInstanceMutex = new Mutex(true, @"Local\" + GetType().Assembly.GetName().Name, out createdNew);
-            if (!createdNew)
-            {
-                SingleInstanceMutex = null;
-                Shutdown();
-                return;
-            }
-
             AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
             LoadKernel();
 
@@ -190,7 +191,10 @@ namespace MediaBrowser.ServerApplication
 
             base.OnExit(e);
 
-            CompositionRoot.Dispose();
+            if (CompositionRoot != null)
+            {
+                CompositionRoot.Dispose();
+            }
         }
 
         /// <summary>
@@ -198,15 +202,15 @@ namespace MediaBrowser.ServerApplication
         /// </summary>
         private void ReleaseMutex()
         {
-            if (SingleInstanceMutex == null)
+            if (_singleInstanceMutex == null)
             {
                 return;
             }
 
-            SingleInstanceMutex.ReleaseMutex();
-            SingleInstanceMutex.Close();
-            SingleInstanceMutex.Dispose();
-            SingleInstanceMutex = null;
+            _singleInstanceMutex.ReleaseMutex();
+            _singleInstanceMutex.Close();
+            _singleInstanceMutex.Dispose();
+            _singleInstanceMutex = null;
         }
 
         /// <summary>