2010-10-19 5 views
0

Я обновляю приложение для смарт-карт (.net 2 с помощью winscard.dll) для запуска в Windows 7. Для 32-разрядных файлов требуются незначительные изменения. Под 64-битным, по-видимому, есть зависающий вызов SCardConnectA - он сидит и не возвращается. Остановка обслуживания смарт-карты/извлечение карты позволяет программе завершить работу.Hang With ScardConnectA on Win 7 64bit

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

Любые предложения о том, как исследовать? Есть ли значение тайм-аута, которое я могу применить здесь?

Спасибо,

Дэви Митчелл

ответ

0

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

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

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

Davy Mitchell

1

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

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

+0

Thanks Hans - некоторые хорошие предложения там. Я сообщу о любом прогрессе :-) – daftspaniel

1

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

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

+0

Спасибо - да, используя 64-битные драйверы. – daftspaniel

1
  • Почему вы используете SCardConnectA вместо SCardConnect?
  • Подвесной SCardConnect может означать, что есть еще одно приложение, которое делает что-то с этой картой, вы уверены, что это не так?
+0

Спасибо за ответ. 1) Нет особых причин - переход к версии Unicode имеет тот же результат. 2) Другое приложение не используется. Тот же набор операций работает в 32 бит. Невозможно увидеть причину для 64-битного, требующую разных шагов для чтения карты (возможно, хотя). – daftspaniel