Зависать с ScardConnectA на Win 7 64bit - PullRequest
0 голосов
/ 19 октября 2010

Я обновляю приложение смарт-карты (.net 2 с использованием winscard.dll) для работы в Windows 7. Для 32-разрядных систем требуются только незначительные изменения.В 64-битном режиме возникает зависание вызова SCardConnectA - он сидит и не возвращается.Остановка службы смарт-карт / удаление карты позволяет завершить приложение.

Приложение .net использует взаимодействие, поэтому, чтобы исключить это, я попытался вызвать scardconnectA из C ++ Dll с тем же результатом.Это происходит на устройствах TODOS и Gemalto.До сих пор в приложении она четко настроена и пообщалась с читателем и определила наличие карты.

Какие-нибудь предложения о том, как провести расследование?Могу ли я применить здесь тайм-аут?

Спасибо,

Дэви Митчелл

Ответы [ 4 ]

1 голос
/ 20 октября 2010

Большинство кард-ридеров включают отдельный установщик для 64-битных драйверов и 32-битных драйверов - Gemalto определенно делает это (см. http://support.gemalto.com/?id=46 для примера страницы с несколькими установщиками ридера для разных архитектур).

Вы дважды проверили, чтобы убедиться, что вы используете 64-битные драйверы под 64-битной ОС?

1 голос
/ 20 октября 2010
  • Почему вы используете SCardConnectA вместо SCardConnect?
  • Зависание SCardConnect может означать, что другое приложение что-то делает с этой картой, вы уверены, что это не так?
1 голос
/ 19 октября 2010

Вам придется работать с соответствующими производителями, чтобы прийти к решению. Вы не опубликовали ни одного фрагмента кода, чтобы убедиться, что сделали что-то не так, я сомневаюсь, если вы дважды проверили поведение в нативной программе. И есть несколько способов нащупать аргументы. Использование версии Unicode, как и всех остальных, было бы маловероятным.

Это сложный запрос на поддержку, вы работаете с двумя сторонами, Microsoft и поставщиком карт, они могут указывать друг на друга. Ваша единственная реальная надежда на быстрый обходной путь - заставить ваше приложение работать в 32-битном режиме, установив для платформы Target значение x86.

0 голосов
/ 03 ноября 2010

Теперь у меня есть решение (извиняюсь, что потратил несколько дней, чтобы его найти здесь).

Появляется изменение поведения в 64-битной Windows 7. Произошла BeginTransaction без EndTransaction в приложении, и это, кажется, вызывает зависание. По какой-то причине 32-битная Windows прощала это.

Еще раз спасибо всем, кто оставил сообщение.

Дэви Митчелл

...