17

我有一个特定的硬件,我想在每次 Windows 重新启动时禁用并重新启用它。我创建了一个应该执行此操作的批处理脚本,然后运行我的程序:

cd %~dp0
devcon.exe disable "PCI\VEN_1002&DEV_687F"
timeout /t 3
devcon.exe enable "PCI\VEN_1002&DEV_687F"

runMyWindows.exe --totally-not-virus

首先我不确定devcon.exe这是否是一个合适的应用程序,因为我根本没有编写 Windows 脚本的经验。

但是,我注意到这些命令并不能完全完成这项工作,因为我的runMyWindows.exe程序无法正常工作,直到我转到 Windows 设备管理器并手动禁用和重新启用该设备。

我在这台机器上只有 1 个用户在“管理员”组中,除了双击.bat文件之外,我没有以任何特殊方式运行此脚本,或者在重新启动的情况下,它从启动文件夹 ( C:\Users\oxxo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup) 运行。

有没有办法在我的批处理脚本中正确执行此操作,该脚本应该在 Windows 启动时自动运行?

4

3 回答 3

16

PnPUtil 也可以完成这项工作,不需要下载 SDK 或其他任何相关内容。自 Vista 以来包含在 Windows 中:

https://docs.microsoft.com/de-de/windows-hardware/drivers/devtest/pnputil

例子

禁用设备实例 ID 指定的设备:

pnputil /disable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"

启用设备实例 ID 指定的设备:

pnputil /enable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
于 2020-08-02T18:28:26.753 回答
13

大多数将阅读此线程的人不会发现其他答案非常有用,因为它主要是关于如何以管理员权限运行问题中的脚本。我将尝试在这里回答隐含的问题:

通过命令行启用/禁用设备

我发现使用 devcon.exe (6mb) 最容易,就像问题中一样:

set HARDWARE_ID="PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"
devcon disable %HARDWARE_ID%
timeout /t 3
devcon enable %HARDWARE_ID%

devcon.exe需要管理员权限。

在哪里得到devcon

它是 Windows 驱动程序开发工具包的一部分。不幸的是,官方资源要求您下载 1gb SDK。我可以通过以下答案之一解决这个问题:https ://superuser.com/questions/1002950/quick-method-to-install-devcon-exe

拥有它后,请确保devcon.exe它在您的%PATH%. 我把我的放进去C:\Windows\System32\

查找您要操作的设备的硬件 ID

以管理员权限打开命令提示符并执行devcon hwids *,这将打印所有设备及其相应的 ID。这将产生大量的输出。使用命令提示符搜索功能查找您需要的内容。这是我感兴趣的部分:

PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61\4&6AB551C&0&00E1
    Name: Intel(R) Wireless WiFi Link 4965AGN
    Hardware IDs:
        PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61
        PCI\VEN_8086&DEV_4229&SUBSYS_11018086
        PCI\VEN_8086&DEV_4229&CC_028000
        PCI\VEN_8086&DEV_4229&CC_0280
    Compatible IDs:
        PCI\VEN_8086&DEV_4229&REV_61
        PCI\VEN_8086&DEV_4229
        PCI\VEN_8086&CC_028000
        PCI\VEN_8086&CC_0280
        PCI\VEN_8086
        PCI\CC_028000
        PCI\CC_0280

选择一个足够具体的 ID 并通过执行以下操作检查它是否有效:

devcon find "PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"

如果只找到 1 台设备,并且这是您想要的,那您很好。请注意,您通常希望使用引号对硬件 ID 进行转义。

奖励:在启动或开机时运行 .bat 脚本

就我而言,我还需要在计算机在关机或睡眠后启动时运行此脚本。我给了上面的脚本合理的权限,并使用任务计划程序在登录和启动时运行它,在其术语中: https://www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log。 html?ltr=T

于 2019-12-26T16:24:30.853 回答
7

由于安全方面的“改进” Windows 10,当然Windows VistaUser Account Control我认为您需要Run as administrator,而不仅仅是管理员组的成员。

它通常应该被解读Run as administratorRun as the user with the account name Administrator不是Run as any user who holds membership of the Administrators group

Run as administrator,右键单击批处理文件并Run as administrator从上下文菜单中选择。

还有其他以管理员身份运行的方式。

  • 您可以使用自升式批处理文件,该文件通常使用PowerShellWSH辅助函数。
  • 您可以使用Task Scheduler和选择适当的触发器和帐户信息(可能使用 SYSTEM 帐户)

此外,您需要确保DevCon.exe是:

  • 除了批处理文件,"%~dp0DevCon.exe" Disable "PCI\VEN_1002&DEV_687F*"
  • 在 %PATH% 内定义的位置,DevCon Disable "PCI\VEN_1002&DEV_687F*"
  • 使用其完整路径调用,"C:\Tools\DevCon.exe" Disable "PCI\VEN_1002&DEV_687F*"

在上述所有情况下,请注意您的示例中缺少的星号

于 2017-11-28T16:29:54.090 回答