Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从MSISCSI启动器_TargetClass中选择*给出一般故障错误_C#_Windows_Visual Studio 2012_Wmi - Fatal编程技术网

C# 从MSISCSI启动器_TargetClass中选择*给出一般故障错误

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

我试图找到我的机器是iscsi存储,但下面的函数给出了一般故障:

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序列号,它需要管理员访问。只需要一个无用的