C# 从MSISCSI启动器_TargetClass中选择*给出一般故障错误
我试图找到我的机器是iscsi存储,但下面的函数给出了一般故障:C# 从MSISCSI启动器_TargetClass中选择*给出一般故障错误,c#,windows,visual-studio-2012,wmi,C#,Windows,Visual Studio 2012,Wmi,我试图找到我的机器是iscsi存储,但下面的函数给出了一般故障: StackTrace = " at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)\r\n at system.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()\r\n at Sys
StackTrace = " at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus
errorCode)\r\n at system.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext()\r\n at System.Management.ManagementObjectCollection.get_Count()\r\n
我的代码:
private string GetISCSInfo(string DeviceID)
{
string StorageType = "Local";
try
{
var scope = new ManagementScope("\\\\.\\ROOT\\WMI");
**SelectQuery query = new SelectQuery("SELECT * FROM MSISCSIInitiator_TargetClass");**
ManagementObjectSearcher iscsiSearcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection iscsiCollection;
string iscsiDeviceID = null;
***//Get() is calling using validSearch function in this function error is throwing***
if (validSearch(iscsiSearcher, out iscsiCollection))
{
foreach (ManagementObject item in iscsiCollection)
{
if (validField(item, "InitiatorName"))
{
iscsiDeviceID = item["InitiatorName"].ToString();
if (string.Equals(iscsiDeviceID, DeviceID, StringComparison.OrdinalIgnoreCase))
{
StorageType = "iSCSI";
}
}
}
}
}
catch (Exception)
{
throw;
}
return StorageType;
}
//Error getting while count is checking
public bool validSearch(ManagementObjectSearcher searcher,
out ManagementObjectCollection collection)
{
collection = searcher.Get();
bool result = false;
try
{
if (collection.Count > 0)
{
result = true;
}
}
catch (Exception e)
{
Trace.TraceWarning("Exception caught while running query: " + e);
//Invalid
}
return result;
}
我用cimv2连接到远程机器,所以查询需要wmi连接,我给出如下命令
var scope = new ManagementScope("\\\\.\\ROOT\\WMI");
SelectQuery query = new SelectQuery("SELECT * FROM MSISCSIInitiator_TargetClass");**
ManagementObjectSearcher iscsiSearcher = new ManagementObjectSearcher(scope, query);
这里我们需要再次调用scope.connect()
问题已解决。将
foreach(管理对象项
更改为foreach(变量项
),然后再试一次,谢谢@Bizhan,但它不会“for”loop.Getting error from validSearch function called。在检查collection.count>0时,它将抛出错误。这可能是访问冲突吗?您是否使用提升的权限运行它?@Bizhan我有几个其他wmi查询正在正确执行。我记得有一次我试图读取HDD序列号,它需要管理员访问。只需要一个无用的