感谢一些其他有用的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);
Run Code Online (Sandbox Code Playgroud)
但是这个集合并没有告诉我关于版本信息的事情.所以我发现我可以查询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();
}
Run Code Online (Sandbox Code Playgroud)
但是,第二个代码块只有在实际插入电缆(设备)时才会成功.我想做的是检查已安装设备驱动程序的版本,无论设备当前是否已插入.
我该怎么做呢?
看来Win32_SystemDriver 类可以为您提供关联驱动程序 .sys 文件的 PathName 。
示例:“\SystemRoot\System32\drivers\afd.sys”
然后您可以使用以下命令获取 .sys 文件版本:
String path = @"C:\Windows\System32\drivers\afd.sys"
var myFileVersionInfo = FileVersionInfo.GetVersionInfo(path);
var version = myFileVersionInfo.ProductVersion;
Run Code Online (Sandbox Code Playgroud)