我正在使用WMI查询来检测USB到串口,但问题是在Windows 7中应用程序需要很长时间才能启动,而在Windows XP中它运行正常。我正在以下列方式使用wmi查询
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PnPDevice");
foreach (ManagementObject queryObj in searcher.Get())
{
if (queryObj["SameElement"].ToString().Contains("SerialPort"))
{
//do something
}
}
根据我的推理,由于大量的Pnp设备和从该列表中查询串口,它正在发生。我尝试使用Win32_SerialPort,但它在Windows XP上工作,而在我的笔记本电脑上(Windows 7)它显示消息不支持,即使它们是虚拟串行端口和USB到串行端口。它甚至不能从管理员帐户工作。 MSSerial_PortName也不能在我的笔记本电脑上运行(windows7)。那么他们使用WMI查询在Windows 7中使我的应用程序启动速度更快的方法是什么?
答案 0 :(得分:1)
Win32_PnPDevice需要很长时间 MSSerial_PortName适用于我的Win 7笔记本电脑。 尝试这个(应该工作,从我有的程序修改):
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSSerial_PortName");
foreach (ManagementObject queryObj in searcher.Get())
{
serialPort = new SerialPort(queryObj["PortName"].ToString(), 115200, Parity.None, 8, StopBits.One);//change parameters
//If the serial port's instance name contains USB
//it must be a USB to serial device
if (queryObj["InstanceName"].ToString().Contains("USB"))//if you have a VID or PID name then this should not be nessesery
{
//should get serial to usb adapters
try
{
serialPort.Open();
if (queryObj["InstanceName"].ToString().Contains(VID_or_PID))
{
//do sth
}
serialPort.Close();
}
catch (Exception ex)
{
//exception handling
}
}
}
}
catch (ManagementException ex)
{
//write("Querying for WMI data. Exception raised(" + ex.Message + "): " + ex);
}