目标计算机中存在多个相同型号的网络适配器。如下图,都是Intel I211。
PCI\VEN_8086&DEV_1539&SUBSYS_00008086&REV_03\0060E0FFFF6336A000
Name: Intel(R) I211 Gigabit Network Connection
Hardware IDs:
PCI\VEN_8086&DEV_1539&SUBSYS_00008086&REV_03
PCI\VEN_8086&DEV_1539&SUBSYS_00008086
PCI\VEN_8086&DEV_1539&CC_020000
PCI\VEN_8086&DEV_1539&CC_0200
Compatible IDs:
PCI\VEN_8086&DEV_1539&REV_03
PCI\VEN_8086&DEV_1539
PCI\VEN_8086&CC_020000
PCI\VEN_8086&CC_0200
PCI\VEN_8086
PCI\CC_020000&DT_0
PCI\CC_020000
PCI\CC_0200&DT_0
PCI\CC_0200
PCI\VEN_8086&DEV_1539&SUBSYS_00008086&REV_03\0060E0FFFF6336A100
Name: Intel(R) I211 Gigabit Network Connection #2
Hardware IDs:
PCI\VEN_8086&DEV_1539&SUBSYS_00008086&REV_03
PCI\VEN_8086&DEV_1539&SUBSYS_00008086
PCI\VEN_8086&DEV_1539&CC_020000
PCI\VEN_8086&DEV_1539&CC_0200
Compatible IDs:
PCI\VEN_8086&DEV_1539&REV_03
PCI\VEN_8086&DEV_1539
PCI\VEN_8086&CC_020000
PCI\VEN_8086&CC_0200
PCI\VEN_8086
PCI\CC_020000&DT_0
PCI\CC_020000
PCI\CC_0200&DT_0
PCI\CC_0200
如何通过 devcon、C++ 或 C# 为这些相同型号适配器中的特定一个更新驱动程序?例如,通过唯一的 device instance ID 更新(例如:PCI\VEN_8086&DEV_1539&SUBSYS_00008086&REV_03\0060E0FFFF6336A100)
谢谢
编辑: 我为此搜索了 API,但它们都使用 hardware ID更新驱动程序,这将更新所有相同型号适配器的驱动程序。 例如:C++ 的 UpdateDriverForPlugAndPlayDevicesA和 devcon 的 update命令。
编辑 2: 这个问题的动机是我们正在使用 RTOS(实时操作系统,RTX64),我们希望通过 RTOS 与其他设备建立实时网络通信(EtherCAT 连接)。我们需要将其中一个适配器的驱动程序更新为RTX64提供的驱动程序,以便它可以使用该适配器。
我们只更新其中一个的唯一可行解决方案是使用 Windows 的“设备管理器”。 (下图中没有同型号适配器,只是展示了如何通过设备管理器手动更新)
我们要求用户在安装我们的软件后进行此手动更新。这对他们来说不方便。因此,我们正试图找到一种自动执行此操作的方法。
既然 Windows 中的设备管理器可以做到这一点,我们假设也有一个 API 可以做到这一点。
最佳答案
两种解决方法。一种是在更新设备驱动程序时最大限度地减少人工客户交互,另一种是完全自动化该过程,但需要使用类似 BASIC 的语言进行编码。
第一个包含在 automatically showing the Hardware Update Wizard 上对于该特定设备实例,使用上一个链接中所述的 API 函数 DiShowUpdateDevice
。
第二个是使用免费 AutoIt自动化软件。有了它,您基本上可以自动化 Windows 系统中的所有内容,它非常强大,我已经将它与网络机器人和自动网络测试(非 headless )结合使用。我还在 Windows 系统的双击部署和许多系统管理任务中使用了它。
请注意,您也可以混合使用这两种方法。首先,使用DiShowUpdateDevice
来显示向导,然后AutoIt脚本可以自动进行UI交互,客户端什么都不用做。
关于c# - 更新其中一个相同型号网络适配器的驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516468/