2016-05-13 4 views
1

Я разрабатываю настольное приложение .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 удаленно, чего я не делаю (не думаю!).

Что может вызвать это исключение для некоторых пользователей, но не для других?

ответ

0

Убедитесь, что у пользователей есть соответствующие списки ACL, так как некоторые запросы WMI требуют повышенных прав для выполнения.

Смежные вопросы