c# - 更新其中一个相同型号网络适配器的驱动程序

标签 c# c++ windows real-time devcon

目标计算机中存在多个相同型号的网络适配器。如下图,都是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 的“设备管理器”。 (下图中没有同型号适配器,只是展示了如何通过设备管理器手动更新) enter image description here

我们要求用户在安装我们的软件后进行此手动更新。这对他们来说不方便。因此,我们正试图找到一种自动执行此操作的方法。

既然 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/

相关文章:

c# - 有没有办法将 ClickOnce-Releases 推送到 Github 分支?

python - 如何使用 python 脚本安装 msi?

angularjs - 未找到 Yeoman 指令模板

windows - 更改 .bat 文件中的代码页(Win7 与 Win Vista)

c# - 使用 ServiceStack.Text 将 Json 反序列化为动态对象

c# - 选择数据库结构/引擎的指南

c# - 从不能在文件名中使用的符号中清除字符串

c# - 这是三元运算符的合理使用吗?

c++ - 创建 InputOnly 窗口

c++ - 改变击键速度 C++