Freelancers Ответов: 1

Отсоедините/подключите USB-накопитель c#.net


Привет Ребята,

Мы разработали некоторое приложение с биометрическим USB-устройством для входа в приложение windows. Он отлично работает, за исключением проблемы зависания устройства. После стольких попыток или, можно сказать, с интервалом в 15 дней, устройство застряло и работает только после повторной установки.

Мы пытались решить эту проблему, но все равно она иногда возникает на каких-то машинах. Таким образом, мы ищем какой-то другой способ отключить/подключиться программно на кнопке обновления.

Биометрическое устройство не отображается как "диск" на жестком диске, а также имеет емкость памяти.

Заранее спасибо...!

Что я уже пробовал:

Попробовал какой - то кусок кода, а также попробовал через настройки реестра, но не повезло.

0x01AA

Вы используете может быть usbser.sys чтобы управлять usb-устройством?

Ramshri

Закройте ручку после того, как каждый раз, когда вы читаете отпечатков пальцев и вызов метода init раньше каждый раз захватывая отпечатков пальцев. Поделитесь, если это сработает

1 Ответов

Рейтинг:
2

Jochen Arndt

Методы из этого решения будут использовать C API. Таким образом, вам придется использовать PInvoke с C#.

Самый чистый метод-это использование специфичной для устройства библиотеки API, которая обеспечивает вызов сброса. Такие библиотеки обычно предоставляются как часть SDK. Проверьте, предоставляется ли такой SDK для вашего устройства, выполнив поиск в интернете или связавшись с производителем. Если это так, проверьте, обеспечивает ли он функцию сброса. Эти API обеспечивают, как правило, также функция, чтобы найти настоящего устройства.

Для других методов вы должны сначала идентифицировать устройство или USB-концентратор, к которому оно подключено. Обратите внимание также, что они требуют привилегий администратора.

Для большинства других методов вы должны использовать Windows SetupAPI. Статья Аппаратная вспомогательная библиотека для C#[^] и источники могут быть полезны.

Первая задача-идентифицировать устройство(ы) с помощью одной из функций перечисления SetupAPI. Если вы хотите получить доступ к самому устройству, вы можете получить GUID устройства из установочного файла INF. Для перечисления концентраторов используйте GUID_DEVINTERFACE_USB_HUB.

Перечислив USB-концентраторы, вы можете для каждого перечислить детей (которые также могут быть концентраторами), пока не найдете свое устройство. Тогда вы можете использовать Функция CM_Disable_DevNode | Microsoft Docs[^] и Функция CM_Enable_DevNode | Microsoft Docs[^] чтобы попытаться снова привести устройство в надлежащее состояние. Обратите внимание, что это может работать не со всеми устройствами и версиями Windows.

Наконец, вы можете пойти на низкий уровень и использовать LibUsbDotNet C# USB библиотека скачать | SourceForge.net[^]. Это все позволяет переключать (отключать и снова включать) USB-концентраторы и порты, что приводит к удалению и повторной вставке подключенных устройств.


Freelancers

@Jochen - Спасибо за предложение, но только что я попробовал статью с операционной системой Win7/Win8/Win10, она не работает. Он ничего не показывает.

Jochen Arndt

Artcile довольно старый и предназначался только для чтения. Но использование SeupAPI с PInvoke должно работать даже с Windows 10.

Вы проверили наличие SDK? Это предпочтительный метод.

Любой другой метод требует много чтения, понимания того, как он работает, и тестирования.