WMIC.exe找不到插入的USB设备

时间:2015-02-05 19:06:05

标签: c# serial-port wmic

在下面的方法中,我启动一个调用WMIC.exe的过程,以便查询连接的usb设备的DeviceID。 问题在于,有时虽然设备已插入,但WIMC不会返回任何实例,就像设备未插入一样。然而,同时设备管理器在“端口(COM& LPT)”下显示设备,这意味着WMIC的信息不准确。我的意思是,如果设备崩溃或以任何方式出现设备故障并且需要某种重置,它也应该不在设备管理器列表中。

方法:

private string DonglePortName()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "C:\\Windows\\System32\\wbem\\WMIC.exe";
        startInfo.Arguments = "PATH Win32_SerialPort  GET /VALUE";
        startInfo.RedirectStandardOutput = true;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = true;

        Process processTemp = new Process();
        processTemp.StartInfo = startInfo;
        processTemp.EnableRaisingEvents = true;

        processTemp.Start();
        string output = processTemp.StandardOutput.ReadToEnd();
        int indexOfBGEntry = output.IndexOf("Bluegiga Bluetooth Low Energy");
        if(indexOfBGEntry > -1)
        {
            string output_sub = output.Substring(indexOfBGEntry);
            string str = "DeviceID=";
            int i = output_sub.IndexOf(str);
            int start = i + str.Length;

            string substr = output_sub.Substring(start);
            int end = substr.IndexOf("\r");

            return output_sub.Substring(start, end);
        }
        return null;
    }

此时在cmd窗口上执行:

C:\\Windows\\System32\\wbem\\WMIC.exe PATH Win32_SerialPort GET /VALUE

返回:

No Instance(s) Available.

同时设备管理器显示设备(即使在单击扫描硬件更改后)。

所以上面的C#代码实际上并不需要用来演示这个问题,但我只是在这里,以防万一有人可以提出另一个更强大的方法来获取设备端口(在C#中)或者可以指出原因WMIC的不准确性。

另一个线索是,在读取/写入SerialPort的代码的另一部分上,WMIC总是在异常(和崩溃)之后返回No Instance(s) Available。然后,我必须拔掉并重新插入USB设备,然后WMIC再次“查看”它。尽管如此,设备管理器始终显示设备。

1 个答案:

答案 0 :(得分:0)

您正在查找错误的WMIC路径,因为Win32_SerialPort WMI类表示运行Windows的计算机系统上的串行端口。简而言之,这里是ProviderType属性(通信提供者类型)列表:

  

传真设备,LAT协议,调制解调器设备,网桥,并行   端口,RS232串口,RS422端口,RS423端口,RS449端口,   扫描仪设备,TCP / IP TelNet,X.25,未指定

检查下一个命令输出:

wmic path CIM_LogicalDevice where "Description like 'USB%'" get /value

资源:Computer System Hardware Classes