如何通过查询注册表找出是否安装了USB设备驱动程序?

时间:2015-02-17 10:08:56

标签: windows usb driver device-driver

我正在尝试检查是否在安装过程中为特定USB设备安装了驱动程序。不幸的是,制造商为同一个驱动程序提供了几个不同的安装程序,并且注册表中似乎没有一致的位置来检查驱动程序是否已安装。但是很明显,Windows 必须知道是否为给定的USB设备ID(例如VID和PID)安装了驱动程序,并且我认为这是记录在注册表中的?

如何仅通过查询注册表来检查驱动程序是否安装,而不依赖于查找特定于安装程序的密钥,例如对卸载程序的引用(不可靠)或调用Windows API函数?

2 个答案:

答案 0 :(得分:1)

不要查询注册表。没有记录的位置,它会发生变化。绝对是版本之间,可能是服务包。

正确的方法是使用Windows API函数,并且不清楚为什么要拒​​绝此解决方案。

答案 1 :(得分:0)

我遇到了与您想在Installshield中检查是否存在设备驱动程序相同的问题。

我首先尝试了USB Device Registry Entries中提到的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\路径,它在我尝试过的2个Windows 10系统上都有效,但是在第3个系统上,它不再但是在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceMigration\Devices\USB\中,我认为它具有Windows 10更新,但我不确定…

我终于发现,在所有系统上,我能够在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class中找到VID / PID文本(在我的情况下为VID_0483&PID_DF11),这几乎是人们通过编程的方式来完成的。 here

无论如何,正如MSaters所建议的那样,我宁愿使用类似System.Management.SelectQuery query = new System.Management.SelectQuery("Win32_SystemDriver");(请参阅How to check whether a driver is installed?)的C#Windows查询,因为我不确定注册表查询始终可以正常工作,但是在我看来,这是不可能的。

编辑:

我发现,即使没有安装驱动程序,Windows也会在连接设备后立即在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\下创建注册表项,这意味着检查驱动程序是否已安装是不正确的方式。

不过,还有另一种方法,注册表项包含“ VID_XXXX&PID_YYYY”,然后包含“ SERIAL”作为子文件夹,在我的情况下(VID = 1FC9,PID = 000C,SERIAL = ABCD)\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_1FC9&PID_000C\ABCD,您可以检查存在名为Driver的条目,似乎只有在安装驱动程序后才创建。

由于某种原因,要在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceMigration\Devices\USB\VID_1FC9&PID_000C\ABCD下查找的条目似乎不是Driver,而是DriverInfName