使用 Devcon 删除不存在的硬件?

使用 Devcon 删除不存在的硬件?

我正在自动从装有 Windows XP SP3 的机器上删除 USB 打印机。为此,我使用 Microsoft 的德文康公用事业。

运行命令:

devcon findall *hp*

返回:

USBPRINT\HEWLETT-PACKARDHP_LASERJET_PROFESSIONAL_P1606DN\7&8885729&0&USB001: HP
LaserJet Professional P1606dn
1 matching device(s) found.

运行命令:

devcon remove *USBPRINT*

返回:

No devices removed.

我尝试了多种硬件 ID 和通配符组合,但都没有成功。将设备插入计算机并运行上述删除命令即可删除硬件。

问题出在我使用 devcon 管道查找以确定设备是否已插入,以便可以自动配置。如果我无法移除它,即使它没有插入,我的脚本也会检测到它。

我已经使用多台 USB 打印机和一个 USB 鼠标进行了测试,它们都表现出相同的行为,这让我相信这是 Devcon 的正常行为。

有解决方法吗?如何删除不再连接的硬件条目?

答案1

Devcon 确实有效。你只需要确保你针对的是适合你的操作系统的正确版本的 devcon。

看看这个链接http://freneticrapport.blogspot.com/2011/05/windows-hiddennot-connected-device.html

要为您的操作系统安装正确的 devcon 版本:

  • 安装 Windows 驱动程序工具包
  • 转到开始 -> 程序 -> 开发工具包 -> WDK XXXX -> 构建环境 -> Windows [目标] -> Windows [目标] 免费构建环境,将 [目标] 替换为您要构建的 Windows 的适当版本。
  • 转到 WDK 安装目录中的 src\setup\devcon 文件夹并运行: build -ceZ

然后您可以使用以下命令删除该设备:

devcon remove "@PCI\VEN_1000&DEV_0060&SUBSYS_1F0C1028&REV_04\4&10333E29&0&0030"

请记下引号和@符号,因为它们是删除隐藏设备所必需的。

答案2

正如 GregL 提到的,devon 可以并且将会移除不存在的硬件。

字符串的格式必须正确。

以下批处理文件将根据输入的字符串匹配所有设备并将其删除:

for /f %%i in ('devcon findall *%1*') do (devcon remove "@%%i")

答案3

德文康不能删除当前未连接的硬件。这是预期行为。我应该更好地阅读文档。

findall命令会搜索所有硬件,无论是否已连接。我应该使用find仅搜索当前已连接硬件的命令。

答案4

已将 removeall 命令添加到 devcon。devcon 是 Windows 驱动程序工具包 (WDK) 的一部分,但我在 WDK 附带的可执行文件中未找到新的 removeall 命令。我假设您必须从源代码构建它;这就是我所做的。说明如下: 从源代码构建 devcon

它涉及安装 Visual Studio、Windows SDK、WDK,然后从 git 存储库下载最新示例。我发现我需要手动执行“MC msgs.mc”才能使构建工作。

相关内容