Я разрабатываю настольное приложение .Net 4.6.1, которое использует следующий код для определения удобного для пользователя имени операционной системы для ведения журнала (как предложено в this answer).Почему ManagementObjectSearcher.Get() выбрасывает UnauthorizedAccessException?
public static string GetOSFriendlyName()
{
string result = string.Empty;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem");
foreach (ManagementObject os in searcher.Get())
{
result = os["Caption"].ToString();
break;
}
return result;
}
Однако я получаю сообщения об ошибках от некоторых моих пользователей о том, что ManagementObjectSearcher.Get()
бросает UnauthorizedAccessException
:
System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
at System.Management.ThreadDispatch.Start()
at System.Management.ManagementScope.Initialize()
at System.Management.ManagementObjectSearcher.Initialize()
at System.Management.ManagementObjectSearcher.Get()
[my code]
Я ничего не знаю о WMI (имеющий просто скопированный код из ряда выше SO ответ), и поэтому я понятия не имею, что может вызвать это исключение, и я не смог воспроизвести исключение самостоятельно. Googling только показал результаты для людей, пытающихся подключиться к WMI удаленно, чего я не делаю (не думаю!).
Что может вызвать это исключение для некоторых пользователей, но не для других?