X509Certificate2UI.SelectFromCollection正在关闭应用程序

时间:2018-12-07 13:11:12

标签: c# .net winforms windows-10 x509

在给定的客户端上,当访问X509Certificate2UI.SelectFromCollection函数时,应用程序将关闭,甚至不进行错误处理。

此功能将打开一个Windows对话框,供用户选择数字证书。

我使用的是.NET Framework 4.5,问题发生在装有Windows 10 Pro的计算机上,该计算机具有大约8个有效证书。

我做了一个测试应用程序,以获取日志并准确找出问题发生的位置,这就是使用X509Certificate2UI.SelectFromCollection函数的时间。

static void Main(string[] args)
    {
        Console.WriteLine("Iniciando a aplicação para seleção de certificado");
        try
        {
            Console.WriteLine("new X509Store");
            X509Store store = new X509Store(StoreLocation.CurrentUser);

            Console.WriteLine("store.Open");
            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

            // Obtém a coleção de certificados instalados
            Console.WriteLine("store.Certificates");
            X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;

            // Excluí da coleção certificados vencidos, comparando a data corrente
            Console.WriteLine("collection.Find");
            X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);

            Console.WriteLine("X509Certificate2UI.SelectFromCollection");
            X509Certificate2Collection certificados = X509Certificate2UI.SelectFromCollection(fcollection, "Certificados Cadastrados", "Selecione seu certificado", X509SelectionFlag.SingleSelection);

            Console.WriteLine("store.Close");
            store.Close();

            Console.WriteLine("certificados.Count");
            if (certificados.Count == 0)
            {

            }

            Console.WriteLine("certificados[0]");
            var teste = certificados[0];
            Console.WriteLine("certificados[0].Subject");
            var texto = certificados[0].Subject;
        }
        catch (Exception ex)
        {
            Console.WriteLine("ex.Message");
            Console.WriteLine(ex.Message);
        }

        Console.WriteLine("Finalizando");
        Console.ReadKey();
    }

有人知道导致此错误的原因吗?

0 个答案:

没有答案