Как использовать Microsoft.Management.Infrastructure (MMI) вместо System.Management для локальных запросов WMI - PullRequest
0 голосов
/ 31 октября 2019

У меня есть этот фрагмент для получения версии Windows с использованием WMIC

(from x in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType<ManagementObject>()
                    select x.GetPropertyValue("Version")).FirstOrDefault().ToString();

Поскольку WMI считается устаревшим, и для .NET Core реализации System.Configuration требуется обновленная версия .NET Framework, похоже, эту информацию нужно получить с помощью MMI.

Удивительно, но у каждой проблемы Windows, требующей доступа WMI, есть что-то вроде приведенного выше фрагмента. Похоже, что внедрение MMI еще не так высоко, и найти хорошие примеры MMI нелегко.

Как я могу использовать Microsoft.Management.Infrastructure для выполнения кода выше?

1 Ответ

0 голосов
/ 31 октября 2019
CimSession.Create(null) // null instead of localhost which would otherwise require certain MMI services running
                .QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_OperatingSystem")
                .FirstOrDefault().CimInstanceProperties["Version"].Value.ToString();

Небольшое примечание для .NET Core : из-за некоторых проблем с идентификатором среды выполнения с пакетом Microsoft.Management.Infrastructure мне пришлось добавить это в файл csproj (x86предназначен для нашего варианта использования):

<RuntimeIdentifier>win7-x86</RuntimeIdentifier>
...