Мое приложение на .net core 5 завершает работу с ошибкой при попытке получить идентификатор оборудования на Windows 7
Я разрабатываю приложение на .net core 5 для использования в Windows 10, но появилась необходимость добавить поддержку Windows 7 и я столкнулся с проблемой. Приложение работает нормально, но при попытке получить идентификатор оборудования возникает ошибка:
Application: MyApp.exe
CoreCLR Version: 5.0.1321.56516
.NET Version: 5.0.13
Description: The process was terminated due to an unhandled exception.
Exception Info: System.TypeInitializationException: The type initializer for 'System.Management.WmiNetUtilsHelper' threw an exception.
---> System.ComponentModel.Win32Exception (126): Failed to load required native library 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\wminet_utils.dll'.
at System.Management.WmiNetUtilsHelper..cctor()
--- End of inner exception stack trace ---
at System.Management.MTAHelper.IsNoContextMTA()
at System.Management.MTAHelper.CreateInMTA(Type type)
at System.Management.ManagementPath.CreateWbemPath(String path)
...
Код:
ManagementObjectSearcher mbs = new("Select ProcessorId From Win32_processor"); // <- Ошибка
ManagementObjectCollection mbsList = mbs.Get();
foreach (ManagementObject mo in mbsList)
{
id += mo["ProcessorId"].ToString();
}
Я установил следующие пакеты обновлений, но это не решило проблему:
KB4457144
KB2999226
KB3063858
.net framework 4.0 тоже установлен
Ответы (2 шт):
Необходимо было установить .NET Framework 4.7.2 Спасибо EvgeniyZ
Чтобы использовать WMI и не зависеть от .NET Framework и иметь возможность собирать ваш проект self-contained, попробуйте эту библиотеку https://github.com/MartinKuschnik/WmiLight https://www.nuget.org/packages/WmiLight/
Автор её специально написал из соображений производительности:
У реализации .Net framework есть одна большая проблема. При каждой удаленной операции происходит небольшая утечка памяти. Используйте эту структуру, если ваше приложение является службой или работает долго, и вы отправляете много удаленных запросов.
Но нам (мне) она пригодится, чтобы избавиться от зависимости на .NET Framework.