4

我正在尝试从远程计算机的 D 盘获取 FreeSpace。

最后,我得到一个 ManagementException 未被用户代码“未找到”处理

这是给我错误的行: fs = m["FreeSpace"].ToString();

这是我的代码:

ConnectionOptions oConn = new ConnectionOptions();

oConn.Username = "username";
oConn.Password = "password";
oConn.Authority = "ntlmdomain:XXX";

ManagementScope scope = new ManagementScope("\\\\Remote_Computer\\root\\CIMV2", oConn);

scope.Connect();

ObjectQuery query = new ObjectQuery("SELECT DeviceID, VolumeName FROM Win32_LogicalDisk where DeviceID = 'D:'");

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

ManagementObjectCollection queryCollection = searcher.Get();

foreach (ManagementObject m in queryCollection)
{
      //error happens here
      fs = m["FreeSpace"].ToString();

      freeSpace = Convert.ToInt64(fs);
}
4

2 回答 2

2

我发现了问题所在。

我的查询是错误的。我将其替换为:

"SELECT FreeSpace FROM Win32_LogicalDisk where DeviceID = 'D:'"

并且问题解决了。

于 2012-09-26T14:15:23.807 回答
0

相信这篇文章应该会给你一个答案!!

基本上,它归结为以下两种方法之一:

要么导入 GetDiskFreeSpaceEx 并在驱动器路径上使用它,要么在预先连接的网络驱动器上使用 WMI。

因此,您需要对该驱动器进行网络访问。

如果您正在尝试监控远程系统,您可以轻松创建一个小型应用程序/服务,该应用程序/服务将在该计算机上运行并不断收集所需信息,然后使用 WCF 之类的东西将其提供给监控应用程序,或者甚至直接连接(如果您)想。

让我知道这是否有帮助,

最大限度

编辑: 实际上,我误解了你的问题。我以为你首先在寻找一种连接方式。不过,我会将这个答案留在这里,以便任何通过搜索找到这个答案的人都可能会发现它很有用。

于 2012-09-26T14:24:46.533 回答