devcon disable не может отключить устройство не найдено
Я на Windows 8.1 пытаюсь отключить мою сенсорную панель программно. Я установил правильную 64-битную версию devcon, как отмечено здесь. Я могу найти правильное устройство, но devcon disable
с такими же параметрами не получается.
PS C:\...\7600.16385.win7_wdk.100208-1538\tools\devcon\amd64> .\devcon.exe disable 'ACPI\SYN1ECA*'
ACPI\SYN1ECA\4&22077A96&0 : Disable failed
No matching devices found.
Что довольно запутанно. Он явно находит нужное устройство, но затем сообщает "Не найдено подходящих устройств". Какого черта?
Обратите внимание, что я знаю об этом похожем вопросе, но, помимо отсутствия принятого ответа, этот вопрос имеет другую ошибку и, вероятно, использует неправильную версию devcon.
5 ответов
Отсутствие подходящих устройств - это способ, которым Windows сообщает вам, что не может найти или получить доступ к устройствам, которые вы ищете. Там может быть несколько причин для этого:
- Неправильные разрешения, вызванные тем, что вы не запускаете командную строку /BAT от имени администратора. Просто щелкните правой кнопкой мыши соответствующий метод доступа и выберите "Запуск от имени администратора".
- Неверный доступ вызван неправильной версией devcon.exe. В качестве остатка перехода на 64-битный компьютер в папке "Инструменты" расположены две версии devcon: одна для x86 и одна для x64, убедитесь, что вы используете правильную версию для своего компьютера и сможете выполнять Ваши задачи без проблем.
Вы используете неправильное "правописание" в вашей команде.
Это должно работать:
devcon.exe disable "ACPI\SYN1ECA*"
Если вы уже нашли точное устройство, которое хотите отключить, вы можете сделать это следующим образом:
devcon.exe disable "@<instace ID>"
В твоем случае:
devcon.exe disable "@ACPI\SYN1ECA\4&22077A96&0"
Если это также не работает, вы должны использовать команду удаления. Удаление работает почти всегда, но устройство вернется после перезагрузки системы.
devcon.exe remove "@<instance ID>"
Подходящих устройств не найдено. devcon сбивает с толку способ заставить вас запустить команду с повышенными правами. это без возвышения
devcon restart "PCI\VEN_10EC&DEV_8168&SUBSYS_85051043&REV_09"
PCI\VEN_10EC&DEV_8168&SUBSYS_85051043&REV_09\4&21A1C3AE&0&00E5: Restart failed
No matching devices found.
это с возвышением
devcon restart "PCI\VEN_10EC&DEV_8168&SUBSYS_85051043&REV_09"
PCI\VEN_10EC&DEV_8168&SUBSYS_85051043&REV_09\4&21A1C3AE&0&00E5: Restarted
1 device(s) restarted.
Посмотрите на вопрос суперпользователя
Продолжить:
Чтобы скачать правильную версию devcon x86 / x64. Запустите команды devcon в cmd.exe с правами администратора
Чтобы заблокировать / разблокировать:
USB\VID_1C4F&PID_0002&MI_01\6&1578F7C2&0&0001 : USB storage device
%windir%\system32\devcon.exe disable *VID_1C4F*
and
%windir%\system32\devcon.exe enable *VID_1C4F*
Иногда devcon не отключает:
USB\VID_1C4F&PID_0002&MI_01\6&1578F7C2&0&0001 : Disabled
HID\VID_1C4F&PID_0002&MI_00\7&2B89365C&0&0000 : Disable failed
В этом случае единственное решение - заменить команду "отключить" на "удалить":
%windir%\system32\devcon.exe remove *VID_1C4F*
HID\VID_1C4F&PID_0002&MI_00\7&2B89365C&0&0000 : Removed
1 device(s) were removed.
Но devcon не является постоянным решением для блокировки и разблокировки устройств. Тест состоит в том, что вы можете заблокировать USB-устройство, а затем запустить скрипт bash renewusb_2k.bat, и вы увидите, что скрипт снова переустанавливает драйверы USB, и заблокированное USB-устройство снова становится доступным.
Программный подход в Python. Что в итоге сработало и для меня, так это, конечно, запуск моего приложения от имени администратора и трюк с удалением устройств/повторным сканированием:
DevConFX3Regex = re.compile(r'(?P<device_id>USB[^\s]*)\s+ : FX3')
DevConCOMRegex = re.compile(r'(?P<device_id>[^\s]*)\s+ : .*\(COM[0-9]{1,3}\).*')
def auto_repair_usb_com_ports(self):
os.system('devcon findall * > DevCon.txt')
with open('DevCon.txt', 'r') as devcon_text:
devcon_text = devcon_text.read()
for match in self.DevConFX3Regex.finditer(devcon_text):
device_id = match.group("device_id")
print(device_id)
device_id = f'"@{device_id}"'
os.system(f'devcon remove {device_id}')
for match in self.DevConCOMRegex.finditer(devcon_text):
device_id = match.group('device_id')
device_id = f'"@{device_id}"'
os.system(f'devcon remove {device_id}')
os.system('devcon rescan')