0

我正在更新一个智能卡应用程序(使用 winscard.dll 的.net 2)以在 Windows 7 上运行。32 位只需要进行微小的更改。在 64 位下,似乎有一个调用 SCardConnectA 的挂起 - 它坐下并且不返回。停止智能卡服务/移除卡允许应用程序完成。

.net 应用程序使用互操作,因此为了排除这种情况,我尝试从 C++ Dll 调用 scardconnectA,结果相同。这发生在 TODOS 和 Gemalto 设备上。到目前为止,在应用程序中,它已经清楚地设置并与读卡器对话并确定卡的存在。

关于如何调查的任何建议?我可以在这里应用超时值吗?

谢谢,

戴维·米切尔

4

4 回答 4

1
  • 为什么使用 SCardConnectA 而不是 SCardConnect?
  • 挂起的 SCardConnect 可能意味着有另一个应用程序在使用该卡执行某些操作,您确定不是这种情况吗?
于 2010-10-20T10:21:16.840 回答
1

您必须与各自的制造商合作才能找到解决方案。您没有发布任何片段来验证您做错了什么,如果您仔细检查了本机程序中的行为,我对此表示怀疑。并且有几种方法可以弄乱这些论点。像其他人一样使用 Unicode 版本将是一个遥远的机会。

这是一种困难的支持请求,您正在与两方合作,Microsoft 和卡供应商,他们很可能互相指责。快速解决方法的唯一真正希望是通过将目标平台设置设置为 x86 来强制您的应用程序在 32 位模式下运行。

于 2010-10-19T15:50:03.743 回答
1

大多数读卡器包含一个单独的 64 位驱动程序和 32 位驱动程序安装程序 - gemalto 肯定会这样做(请参阅http://support.gemalto.com/?id=46以获取具有不同架构的多个读卡器安装程序的示例页面)。

您是否仔细检查以确保您在 64 位操作系统下使用 64 位驱动程序?

于 2010-10-19T23:29:39.373 回答
0

我现在有一个解决方案(抱歉花了几天时间才把它弄到这里来)。

似乎 64 位 Windows 7 中的行为发生了变化。应用程序中有一个没有 EndTransaction 的 BeginTransaction,这似乎导致了挂起。出于某种原因,32 位 Windows 可以原谅这一点。

再次感谢所有留言的人。

戴维·米切尔

于 2010-11-03T13:51:53.900 回答