【发布时间】:2016-09-27 08:39:16
【问题描述】:
您好,我们正在开发分布式结构上的 C# framework v4.0 asp.net mvc 应用程序。我们将 Server1 用于图像 Server2 用于 mysql 数据库,Server3 用于 Web。我的任务是从所有三台服务器获取可用磁盘空间和总磁盘空间,并显示在 Web 管理页面上。我知道如何使用 WMI 显示本地主机的磁盘空间。我想显示具有静态 ip 的 Server1 和 Server3 磁盘信息(所有三个服务器都启用了远程桌面和共享)。但我明白了
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
这是我的代码
ManagementScope scope = new ManagementScope("\\\\Server IP\\root\\cimv2");
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
SelectQuery query1 = new SelectQuery("Select * from Win32_LogicalDisk");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection queryCollection = searcher.Get();
ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(scope, query1);
ManagementObjectCollection queryCollection1 = searcher1.Get();
foreach (ManagementObject m in queryCollection)
{
// Display the remote computer information
Console.WriteLine("Computer Name : {0}",
m["csname"]);
Console.WriteLine("Windows Directory : {0}",
m["WindowsDirectory"]);
Console.WriteLine("Operating System: {0}",
m["Caption"]);
Console.WriteLine("Version: {0}", m["Version"]);
Console.WriteLine("Manufacturer : {0}", m["Manufacturer"]);
Console.WriteLine();
}
foreach (ManagementObject mo in queryCollection1)
{
Console.WriteLine(" Disk Name : {0}", mo["Name"]);
Console.WriteLine(" Disk Size : {0}", mo["Size"]);
Console.WriteLine(" FreeSpace : {0}", mo["FreeSpace"]);
Console.WriteLine(" Disk DeviceID : {0}", mo["DeviceID"]);
Console.WriteLine(" Disk VolumeName : {0}", mo["VolumeName"]);
Console.WriteLine(" Disk SystemName : {0}", mo["SystemName"]);
Console.WriteLine("Disk VolumeSerialNumber : {0}", mo["VolumeSerialNumber"]);
Console.WriteLine();
}
Console.ReadLine();
但是当编译到行 scope.Connect(); 然后它抛出异常访问被拒绝
我尝试了this article using Dcomcnfg.exe security,但仍然无法摆脱这个异常
我也试过
ConnectionOptions options = new ConnectionOptions();
options.Username = @"Admin-PC\username";
options.Password = @"password";
options.Impersonation = ImpersonationLevel.Impersonate;
options.Authentication = AuthenticationLevel.Connect;
options.EnablePrivileges = true;
options.Timeout = new TimeSpan(0, 60, 0);
ManagementScope scope = new ManagementScope("\\\\IP\\root\\cimv2", options);
【问题讨论】:
-
我认为我无法正确配置 dcom 安全性
-
我已经尝试了文章中的所有步骤,但仍然被拒绝访问
-
在 System.Management.ManagementScope.Initialize() 在 System.Management.ManagementScope.InitializeGuts(Object o) 在 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 堆栈跟踪信息。 ManagementScope.Connect()
标签: c# asp.net wmi remote-access diskspace