소스 검색

common: Fix WMI exception (#1422)

* common: Fix WMI exception

We currently don't check if WMI service is available when we get the CPU name and the RAM size.
This fix the issue by catching all exceptions and set default values instead.

Close #1353

* remove useless assign

* Fix Exception

* Address comments

Co-authored-by: Thog <me@thog.eu>
Ac_K 5 년 전
부모
커밋
16bab8fb88
1개의 변경된 파일27개의 추가작업 그리고 4개의 파일을 삭제
  1. 27 4
      Ryujinx.Common/SystemInfo/WindowsSystemInfo.cs

+ 27 - 4
Ryujinx.Common/SystemInfo/WindowsSystemInfo.cs

@@ -1,4 +1,7 @@
+using Ryujinx.Common.Logging;
+using System;
 using System.Management;
+using System.Runtime.InteropServices;
 
 namespace Ryujinx.Common.SystemInfo
 {
@@ -9,14 +12,34 @@ namespace Ryujinx.Common.SystemInfo
 
         public WindowsSysteminfo()
         {
-            foreach (ManagementBaseObject mObject in new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor").Get())
+            bool wmiNotAvailable = false;
+
+            try
+            {
+                foreach (ManagementBaseObject mObject in new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor").Get())
+                {
+                    CpuName = mObject["Name"].ToString();
+                }
+
+                foreach (ManagementBaseObject mObject in new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_OperatingSystem").Get())
+                {
+                    RamSize = ulong.Parse(mObject["TotalVisibleMemorySize"].ToString()) * 1024;
+                }
+            }
+            catch (PlatformNotSupportedException)
             {
-                CpuName = mObject["Name"].ToString();
+                wmiNotAvailable = true;
+            }
+            catch (COMException)
+            {
+                wmiNotAvailable = true;
             }
 
-            foreach (ManagementBaseObject mObject in new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_OperatingSystem").Get())
+            if (wmiNotAvailable)
             {
-                RamSize = ulong.Parse(mObject["TotalVisibleMemorySize"].ToString()) * 1024;
+                Logger.PrintError(LogClass.Application, "WMI isn't available, system informations will use default values.");
+
+                CpuName = "Unknown";
             }
         }
     }