【发布时间】:2015-01-22 00:05:00
【问题描述】:
感谢其他一些有用的 StackOverflow 问题,我找到了一种在 WMI 中查询设备驱动程序的方法。但是,在我看来,数据存储在无法很好地连接在一起的不同地方。
我有一根使用 FTDI 驱动程序的 USB 转串口电缆。我可以查询Win32_SystemDrivers来确定驱动是否已经安装,如下所示:
SelectQuery query = new SelectQuery("Win32_SystemDriver");
query.Condition = "Name = 'FTDIBUS'";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection drivers = searcher.Get();
bool installed = (drivers.Count > 0);
但是那个集合并没有告诉我关于版本信息的任何事情。然后我发现我可以查询Win32_PnPSignedDriver 来查找设备驱动程序的版本。所以我正在做这样的事情:
SelectQuery query = new SelectQuery("Win32_PnPSignedDriver");
query.Condition = "DriverProviderName = 'FTDI'";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection drivers = searcher.Get();
foreach (ManagementBaseObject driverObject in drivers)
{
ManagementObject driver = (ManagementObject)driverObject;
string version = driver["DriverVersion"].ToString();
}
但是,只有在实际插入电缆(设备)时,第二个代码块才会成功。我想做的是检查已安装设备驱动程序的版本,无论设备是否是当前已插入。
我该怎么做?
【问题讨论】: