Browse Source

add try/catch around service check

Luke Pulverenti 8 years ago
parent
commit
e5c2e4b28d
1 changed files with 25 additions and 18 deletions
  1. 25 18
      MediaBrowser.ServerApplication/MainStartup.cs

+ 25 - 18
MediaBrowser.ServerApplication/MainStartup.cs

@@ -196,30 +196,37 @@ namespace MediaBrowser.ServerApplication
 
 
         private static bool IsAlreadyRunningAsService(string applicationPath)
         private static bool IsAlreadyRunningAsService(string applicationPath)
         {
         {
-            var serviceName = BackgroundService.GetExistingServiceName();
+            try
+            {
+                var serviceName = BackgroundService.GetExistingServiceName();
 
 
-            WqlObjectQuery wqlObjectQuery = new WqlObjectQuery(string.Format("SELECT * FROM Win32_Service WHERE State = 'Running' AND Name = '{0}'", serviceName));
-            ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(wqlObjectQuery);
-            ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get();
+                WqlObjectQuery wqlObjectQuery = new WqlObjectQuery(string.Format("SELECT * FROM Win32_Service WHERE State = 'Running' AND Name = '{0}'", serviceName));
+                ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(wqlObjectQuery);
+                ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get();
 
 
-            foreach (ManagementObject managementObject in managementObjectCollection)
-            {
-                var obj = managementObject.GetPropertyValue("PathName");
-                if (obj == null)
+                foreach (ManagementObject managementObject in managementObjectCollection)
                 {
                 {
-                    continue;
-                }
-                var path = obj.ToString();
+                    var obj = managementObject.GetPropertyValue("PathName");
+                    if (obj == null)
+                    {
+                        continue;
+                    }
+                    var path = obj.ToString();
 
 
-                _logger.Info("Service path: {0}", path);
-                // Need to use indexOf instead of equality because the path will have the full service command line
-                if (path.IndexOf(applicationPath, StringComparison.OrdinalIgnoreCase) != -1)
-                {
-                    _logger.Info("The windows service is already running");
-                    MessageBox.Show("Emby Server is already running as a Windows Service. Only one instance is allowed at a time. To run as a tray icon, shut down the Windows Service.");
-                    return true;
+                    _logger.Info("Service path: {0}", path);
+                    // Need to use indexOf instead of equality because the path will have the full service command line
+                    if (path.IndexOf(applicationPath, StringComparison.OrdinalIgnoreCase) != -1)
+                    {
+                        _logger.Info("The windows service is already running");
+                        MessageBox.Show("Emby Server is already running as a Windows Service. Only one instance is allowed at a time. To run as a tray icon, shut down the Windows Service.");
+                        return true;
+                    }
                 }
                 }
             }
             }
+            catch (COMException)
+            {
+                // Catch errors thrown due to WMI not being initialized
+            }
 
 
             return false;
             return false;
         }
         }