我使用一些代码来尝试计算.NET 2.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这段代码在cassini上运行得很好,但在我们的beta服务器上就崩溃了。有谁知道该怎么做吗?
发布于 2010-12-01 00:30:21
好吧,我讨厌回答我自己的问题,但我发现了这个:http://support.microsoft.com/kb/317012,它似乎确实起作用了。
您必须专门修改您的CIMV2权限,而我必须针对特定用户执行此操作,而不是针对ASP.NET。一旦打开它,您就可以使用System.Management代码来计算处理器等。
我真的不喜欢这样晦涩难懂。微软需要更新这些异常。当System.Management类像这样失败时,它应该给出详细的信息,说明需要激活哪些权限才能使代码工作。
发布于 2010-11-12 04:23:55
看起来像是权限问题。
如果它在本地运行良好(在cassini下),它将在您的凭据下运行,这些凭据可能具有本地管理员权限,因此具有访问此数据的正确权限。
确保代码以具有足够权限获取此数据的用户身份运行(如果运行IIS 7及更高版本,请查看应用程序池标识-这将是运行代码的帐户)。
发布于 2016-01-21 11:27:50
天哪,使用Aspose.Email (域名电子邮件地址验证)还是会遇到同样的问题。
下面是我的错误消息:
字符串:在System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus拒绝访问) at System.Management.ManagementScope.InitializeGuts(Object o) at System.Management.ManagementScope.Initialize() at System.Management.ManagementObjectSearcher.Initialize() at System.Management.ManagementObjectSearcher.Get() at .() at .() at .(String ) at Aspose.Email.Verify.EmailValidator.(String,Int32 )在Aspose.Email.Verify.EmailValidator。(String,MailAddress,String[]& )
对于我的ASP.NET应用程序,我的解决方案是用
using (HostingEnvironment.Impersonate())
{
...
} https://stackoverflow.com/questions/4158890
复制相似问题