0

Я спрашиваю об этом, потому что я в отчаянии, и я не мог найти ни одного сообщения, говорящего об этой проблеме в любом месте.Сертификаты хранить окна 10 C#

В моем приложении WinForms C# Я использую следующий код для извлечения Windows, Сертификаты:

X509Certificate2Collection Certificates = new X509Certificate2Collection(); 

X509Store store = new X509Store(StoreName.My); 
store.Open(OpenFlags.ReadOnly); 

//Filtering the list, showing only not-expired ones 
Certificates = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, false); 
store.Close(); 

Это работает как шарм на всех версиях Windows, от Windows XP к Windows, 8.1. В Windows 10 он работает с первой попытки. Если я сделаю это снова, он застрянет в ожидании.

Я попытался реализовать «тайм-таймер» 60 секунд: предоставленный фрагмент кода просто отключается.

Если пользователь удаляет свой USB-ключ (или смарт-карту), содержащий сертификат с ПК, и снова вставляет его, проблема решена.

У кого-нибудь есть решение для такого поведения? Я в отчаянии, мои клиенты, обновляющиеся до окон 10, сошли с ума, и я не знаю, что делать.

+0

Является ли ваша смарт-карта совместимой с Windows 10? – Crypt32

+0

Конечно, иначе это не сработает в первый раз! В первый раз, когда я использую этот код, я получаю сертификаты, выбираю один, и я использую его для цифровой подписи файла или для аутентификации владельца. Нет проблем. Но во второй раз, когда я запускаю этот код, я просто застрял в ожидании навсегда. ТОЛЬКО на Win10. – Fabio

+0

Это происходит с помощью другой смарт-карты? Какую смарт-карту вы используете? Это может быть ошибка в промежуточном программном обеспечении смарт-карт. – pepo

ответ

0

Наконец-то я нашел решение для этой ошибки Windows 10. Это на самом деле «обходной путь», но 100% работает и не вызывает никаких проблем.

Обходной путь заключается в создании «глобального» магазина X509Store в вашем приложении и НИКОГДА не закрывайте его. Вы просто открываете первый раз, когда вам нужно (или при запуске приложения), и никогда не называете «store.Close();»

Вы можете вызвать store.Certificates.Find (....) на протяжении всего сеанса вашего приложения, и он никогда не покажет проблему, которая случится, если вы закроете магазин и снова откроете его снова. Возможно, это не красивое решение, но работает на 100%. Надеюсь, это поможет, кто, как и я, нашел эту чертову ошибку win10.