为什么ManagementObjectSearcher.Get()抛出UnauthorizedAccessException?

时间:2016-05-13 03:48:38

标签: .net wmi

我正在开发一个.Net 4.6.1桌面应用程序,该应用程序使用以下代码来确定用于记录目的的人性化操作系统名称(如this answer中所述)。

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答案中复制了代码),所以我不知道是什么原因导致该异常被抛出,我还没有能够重现例外我自己。谷歌搜索只是为那些试图远程连接到WMI的人提供了结果,我不这么做(我不这么认为!)。

对于某些用户而不是其他用户可能导致此异常的原因是什么?

1 个答案:

答案 0 :(得分:0)

确保用户具有正确的ACL,因为某些WMI查询需要提升的权限才能执行。