代码之家  ›  专栏  ›  技术社区  ›  LoveMeSomeCode

系统。管理访问被拒绝

  •  3
  • LoveMeSomeCode  · 技术社区  · 14 年前

    我正在使用一些代码尝试计算.NET2.0中的处理器数:

    internal static int GetNumberOfProcessors()
    {
        List<string> list = new List<string>();
        ManagementClass mgmt = new ManagementClass("Win32_Processor");
        foreach (ManagementObject obj in mgmt.GetInstances())
        {
            string item = obj.Properties["SocketDesignation"].Value.ToString();
            if (!list.Contains(item))
            {
                list.Add(item);
            }
        }
        return list.Count;
    }
    

    就这样爆炸了:

    [ManagementException: Access denied ]
       System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) +377984
       System.Management.ManagementScope.InitializeGuts(Object o) +654
       System.Management.ManagementScope.Initialize() +162
       System.Management.ManagementObject.Initialize(Boolean getObject) +492
       System.Management.ManagementClass.GetInstances(EnumerationOptions options) +122
       System.Management.ManagementClass.GetInstances() +6
    

    这段代码在卡西尼号的本地运行良好,但在我们的beta服务器上会崩溃。有人知道该怎么办吗?

    3 回复  |  直到 14 年前
        1
  •  11
  •   LoveMeSomeCode    14 年前

    好吧,我讨厌回答自己的问题,但我发现: http://support.microsoft.com/kb/317012 而且看起来确实管用。

    你必须明确地修改你的CIMV2权限,而我必须为特定的用户而不是ASPNET做这件事。打开后,可以使用系统管理代码计算处理器等。

        2
  •  2
  •   Oded    14 年前

    似乎是权限问题。

    确保代码以具有足够权限获取此数据的用户身份运行(如果运行IIS 7和更高版本,请查看应用程序池标识-这将是运行代码的帐户)。

        3
  •  0
  •   Paul L    9 年前

    天哪,使用Aspose.Email(域电子邮件地址验证)仍然会遇到同样的问题。

    System.Management.ManagementException:访问被拒绝 位于System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus错误代码) 位于System.Management.ManagementScope.Initialize() 在System.Management.ManagementObjectSearcher.Get() 在。() 在。() 在Aspose.Email.Verify.EmailValidator。(字符串,Int32)

    我的ASP.NET应用程序的解决方案是用

    using (HostingEnvironment.Impersonate()) 
    {
        ...
    }