在 Win 7 64 位上使用 ScardConnectA 挂起
Posted
技术标签:
【中文标题】在 Win 7 64 位上使用 ScardConnectA 挂起【英文标题】:Hang With ScardConnectA on Win 7 64bit 【发布时间】:2010-10-19 14:06:23 【问题描述】:我正在更新智能卡应用程序(使用 winscard.dll 的 .net 2)以在 Windows 7 上运行。对于 32 位,只需要进行少量更改。在 64 位下,似乎有一个调用 SCardConnectA 的挂起 - 它坐下并且不返回。停止智能卡服务/移除智能卡允许应用程序完成。
.net 应用程序使用互操作,因此为了排除这种情况,我尝试从 C++ Dll 调用 scardconnectA,结果相同。这发生在 TODOS 和 Gemalto 设备上。到目前为止,在应用程序中,它已经清楚地设置并与读卡器对话并确定卡的存在。
关于如何调查的任何建议?我可以在这里应用超时值吗?
谢谢,
戴维·米切尔
【问题讨论】:
【参考方案1】:您必须与各自的制造商合作才能找到解决方案。您没有发布任何 sn-p 来验证您做错了什么,如果您仔细检查了本机程序中的行为,我对此表示怀疑。并且有几种方法可以弄乱这些论点。像其他人一样使用 Unicode 版本的机会很小。
这是一种困难的支持请求,您与 Microsoft 和卡供应商两方合作,他们很可能互相指责。快速解决方法的唯一真正希望是通过将目标平台设置设置为 x86 来强制您的应用在 32 位模式下运行。
【讨论】:
谢谢汉斯 - 那里有一些很好的建议。我会报告任何进展:-)【参考方案2】:大多数读卡器都为 64 位驱动程序和 32 位驱动程序提供单独的安装程序 - gemalto 肯定会这样做(请参阅 http://support.gemalto.com/?id=46 以获取包含用于不同架构的多个读卡器安装程序的示例页面)。
您是否仔细检查以确保您在 64 位操作系统下使用的是 64 位驱动程序?
【讨论】:
谢谢 - 是的,使用 64 位驱动程序。【参考方案3】: 为什么使用 SCardConnectA 而不是 SCardConnect? 挂起的 SCardConnect 可能意味着有另一个应用程序在使用该卡执行某些操作,您确定不是这种情况吗?【讨论】:
感谢您的回复。 1) 没有特别的原因 - 切换到 Unicode 版本具有相同的结果。 2) 没有使用其他应用程序。同一组操作适用于 32 位。看不到 64 位需要不同步骤来读取卡的原因(虽然可能)。【参考方案4】:我现在有一个解决方案(抱歉花了几天时间才把它弄到这里来)。
在 64 位 Windows 7 中似乎发生了行为变化。应用程序中有一个没有 EndTransaction 的 BeginTransaction,这似乎是导致挂起的原因。出于某种原因,32 位 Windows 可以容忍这一点。
再次感谢所有留言的人。
戴维·米切尔
【讨论】:
以上是关于在 Win 7 64 位上使用 ScardConnectA 挂起的主要内容,如果未能解决你的问题,请参考以下文章
在 Win7 64 位上因未处理的第一次机会异常而崩溃(在 XP 32 位、Linux 64 位上没有问题)
Delphi:如何确定应用程序是不是在 Win32 / Win64 下运行并在 64 位上自动启动 64 位版本?