Parcourir la source

Don't crash on COMException in GraphicsCardDetector

Fixes #626
Antony Male il y a 4 ans
Parent
commit
887ed92782
1 fichiers modifiés avec 16 ajouts et 9 suppressions
  1. 16 9
      src/SyncTrayzor/Services/GraphicsCardDetector.cs

+ 16 - 9
src/SyncTrayzor/Services/GraphicsCardDetector.cs

@@ -20,21 +20,28 @@ namespace SyncTrayzor.Services
         }
 
         private static bool GetIsIntelXe()
-        { 
-            var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
-            foreach (ManagementObject obj in searcher.Get())
+        {
+            // ManagedObjectEnumerator.MoveNext can throw a COMException if WMI isn't started.
+            // We also want to ignore other potential problems. If we hit something, assume they're not
+            // using Intel Xe Graphics.
+            try
             {
-                if (obj["CurrentBitsPerPixel"] != null && obj["CurrentHorizontalResolution"] != null)
+                var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
+                foreach (ManagementObject obj in searcher.Get())
                 {
-                    string name = obj["Name"]?.ToString();
-                    if (name.IndexOf("Intel", StringComparison.OrdinalIgnoreCase) >= 0 &&
-                        name.IndexOf(" Xe ", StringComparison.OrdinalIgnoreCase) >= 0)
+                    if (obj["CurrentBitsPerPixel"] != null && obj["CurrentHorizontalResolution"] != null)
                     {
-                        logger.Info($"Graphics card: {name}");
-                        return true;
+                        string name = obj["Name"]?.ToString();
+                        if (name.IndexOf("Intel", StringComparison.OrdinalIgnoreCase) >= 0 &&
+                            name.IndexOf(" Xe ", StringComparison.OrdinalIgnoreCase) >= 0)
+                        {
+                            logger.Info($"Graphics card: {name}");
+                            return true;
+                        }
                     }
                 }
             }
+            catch { }
 
             return false;
         }