Cryptoki DLL导致应用程序崩溃

时间:2014-09-01 08:05:04

标签: c# smartcard

我在C#应用程序中使用cryptoki。我遇到的问题如下: 我使用以下代码初始化cryptoki:

public static bool InitializeCryptoki(string criptokilib)
{
    if (cryptoki != null)
        throw new PdfSignException(PdfSignExceptionCode.PDF_EXCEPTION_NOT_FINALIZED);
    try
    {
        cryptoki = new Cryptoki(criptokilib);
        if (cryptoki.Initialize() == 0)
        {
            isInitialized = true;
            return true;
        }
        return false;
    }
    catch (CryptokiException ex)
    {
        Log.Log(log, LogState.ERROR, UserId, "Initialize", null, ex.Message);
        return false;
    }
}

criptokilib值等于“eTPKCS11.dll”。

在cryptoki初始化之后,我使用以下代码检查是否存在至少一个读卡器:

public static bool HasCardReaders
{
    get
    {
        if (cryptoki == null)
            throw new PdfSignException(PdfSignExceptionCode.PDF_EXCEPTION_NOT_INITIALIZED);
        return cryptoki.Slots.Count != 0;
    }
}
  • 当从编译器(VS 2012)以调试模式运行应用程序时,会显示一条错误消息(没有应用程序崩溃),表示未检测到读卡器。
  • 在编译器外部运行应用程序(VS 2012)时 - 通过双击调试文件夹中的exe,我的应用程序崩溃了。查看日志文件,有时应用程序在初始化cryptoki时崩溃,有时应用程序在检查是否存在至少一个读卡器时崩溃。

在调试模式下,我发现 cryptoki.Slots [i] .Token 会抛出错误n。 224 - 此错误表示不存在令牌。这个错误会导致我的应用程序崩溃吗?你知道怎么克服这个问题吗?

非常感谢, Gica G。

2 个答案:

答案 0 :(得分:0)

if (cryptoki != null)

这看起来不错。那应该是:

if (cryptoki == null)

答案 1 :(得分:0)

似乎升级到最后一个NCryptoki.dll可以解决问题。

但是我仍然不明白为什么该错误导致我的应用程序崩溃。