Смонтировать MTP-устройство в Windows

Я пытаюсь подключить устройство Android к машине под управлением Windows 10 для доступа к файлам через приложение Java. Я знаю, что консенсус заключается в том, что следует использовать WebDav или FTP-сервер, но я хотел бы избежать этого, если это возможно. Я провел много недель, исследуя это, и наконец решил обратиться к блестящим умам переполнения стека.

Для монтирования MTP-устройства нам понадобится библиотека файловой системы, похожая на fuse для Unix. Для окон два очевидных варианта:

  1. доканы
  2. winfsp

Насколько я понимаю, есть два основных API/библиотеки для доступа к устройствам MTP:

  1. libmtp
  2. WPD

Мне удалось скомпилировать libmtp для Windows, используя msys2/Mingw64.

На мой взгляд, я должен использовать приложение типа mtpmount или попытаться портировать приложение Linux, например simple-mtpfs с использованием библиотеки файловой системы, такой как dokany, вместо fuse.

Однако, когда я пытаюсь использовать mtp-mount (который использует API WPD), он не перечисляет никаких устройств, и когда я тестирую libMTP с использованием предоставленных примеров, я получаю такие ошибки:

libusb_open() failed!: No error
libmtp version: 1.1.18

Listing raw device(s)
Device 0 (VID=04e8 and PID=6860) is a Samsung Galaxy models (MTP).
   Found 1 device(s):
   Samsung: Galaxy models (MTP) (04e8:6860) @ bus 1, dev 10
Attempting to connect device(s)
OK.
LIBMTP PANIC: Unable to initialize device
Unable to open raw device 0

Я не знаю, как поступить. Любая помощь будет принята с благодарностью.

Обновлять

Я заставил libmtp работать, используя libusbk-dev-kit. В частности, я использовал libusbK-inf-wizard для создания драйверов для своего устройства. Я протестировал драйвер libusbk и драйвер WinUSB и обнаружил, что они оба решают мою проблему. Кроме того, я собрал mtpmount из исходников и обнаружил, что он тоже работает.


person A-curious-student    schedule 19.11.2020    source источник


Ответы (1)


Я нашел ваш вопрос, когда искал что-то очень похожее: как разговаривать с MTP (портативный GPS-модуль Garmin Alpha 200i, а не телефон) с помощью Python 3 в Windows 10.

Рад видеть, что вы нашли решение! Я нашел частичное решение своей проблемы, используя ваши лиды (в частности, mtpmount), и мне интересно, предлагает другое альтернативное решение для вашей проблемы.

Мне также интересно, узнали ли вы что-нибудь еще о mtpmount с тех пор, как нашли свое решение.

Основываясь на вашей наводке, я перешел по ссылке mtpmount. Я смог получить полное решение для командной строки Windows, 1) загрузив и запустив последнюю версию .msi для докани, убедившись, что выбраны все компоненты для установки, затем 2) загрузив последнюю версию .exe (это не установщик - это настоящий исполняемый файл mtpmount) для mtpmount. Это настолько гладкий процесс установки, на который можно было бы надеяться в этой области! Снимаю шляпу перед разработчиками обоих этих проектов!

Единственные отличия от документов mtpmount, которые я нашел, заключались в том, что 1) имя исполняемого файла в документах не совсем соответствовало имени исполняемого файла из загрузок - конечно, это не имеет большого значения, и 2) знак фунта стерлингов должен быть в двойных кавычках - по крайней мере, так было в powershell, и 3) хорошо: вы можете указать букву диска в том же синтаксисе ID#:

PS C:\Users\caver\Downloads> .\mtpmount-x64.exe list available
This is mtpmount, version 19.8.0 from commit 43033d6
This program comes with NO WARRANTY. Usage only at your own risk.

Available Connections and Storage Media:
Connection Elements: Contains 1 storages that can be mounted
 |-- Storage E: [ID #0]
Connection My Passport: Contains 1 storages that can be mounted
 |-- Storage F: [ID #1]
Connection Alpha 200i: Contains 2 storages that can be mounted
 |-- Storage Internal Storage [ID #3]
 |-- Storage Memory Card [ID #4]
Use mount command to make one of them a windows removable drive
PS C:\Users\caver\Downloads> .\mtpmount-x64.exe mount "#3" h:
This is mtpmount, version 19.8.0 from commit 43033d6
This program comes with NO WARRANTY. Usage only at your own risk.

Drive H:\ is now Alpha 200i\Internal Storage. Don't forget to unmount the drive (using unmount command) before disconnecting your device
PS C:\Users\caver\Downloads>

Затем вы выполняете работу по доступу к диску. Затем вы запускаете это, чтобы размонтировать:

PS C:\Users\caver\Downloads> .\mtpmount-x64.exe unmount "#3"
This is mtpmount, version 19.8.0 from commit 43033d6
This program comes with NO WARRANTY. Usage only at your own risk.

Alpha 200i\Internal Storage has been unmounted successfully.
Syncing Alpha 200i. DO NOT UNPLUG THIS DEVICE YET!

здесь терминал останавливается примерно на 5 секунд

Cache OK
All content synced to Alpha 200i. You may now unplug this device.
PS C:\Users\caver\Downloads>

Мои вопросы по этому поводу:

  1. влияет ли dokany на доступ к остальной части вашей файловой системы, выполняя все операции с файловой системой через свой прокси для всех дисков? Если да, замедляет ли это работу или добавляет еще один возможный путь для повреждения файловой системы в случае необнаруженной ошибки в dokany или чем-то подобном?

  2. мы работаем с GPS-навигаторами Garmin в условиях, когда невозможно надежно контролировать время отключения. Другими словами, нам действительно нужно иметь возможность отключиться сразу после завершения переноса, не дожидаясь многообещающей паузы в процессе размонтирования. Что можно сказать о горячем отключении устройства MTP, смонтированного с помощью mtpmount? Отключение без запуска «mtpmount unmount», а также отключение во время беременной паузы? Из этих двух вариантов кажется, что было бы безопаснее просто не запускать размонтирование - у вас создается впечатление, что 5-секундная синхронизация будет действительно плохим временем для отключения ... Я знаю, что для запоминающих устройств USB всегда рекомендуется сначала правильно извлеките устройство из Windows, прежде чем физически отключить его, но у нас никогда не возникало проблем из-за горячего отключения GPS-навигаторов Garmin в режиме массового хранения USB.

  3. Вы превратили все это в готовое решение для установки, то есть один общий установщик, который устанавливает dokany, затем устанавливает mtpmount, а затем также устанавливает остальную часть вашего приложения? Я не знаком с такими установщиками, как Nullsoft или подобными, и я определенно планирую установить там RTFM, но мне просто интересно, сталкивались ли вы с какими-либо конкретными сбоями в этих строках.

Спасибо и поздравляю с запуском!

person Tom Grundy    schedule 24.04.2021
comment
Этот вопрос, кажется, указывает на то, что безопасно «просто выдернуть вилку» с точки зрения устройства, но нормально ли это с точки зрения mtpmount? Попробую уточнить у разработчика mtpmount. superuser .com/questions/1131590/ - person Tom Grundy; 24.04.2021