Во-первых, я полный новичок в С#, поэтому я просто ищу в Интернете возможности. Что я хочу получить: мне нужна кнопка, которая извлекает список установленных сертификатов в личном магазине.

Я уже немного пробовал, но получаю сообщения об отсутствующих ссылках и т. д. Поэтому я надеюсь, что кто-нибудь может дать мне небольшой совет, как этого добиться.

То, что я нашел в Интернете, это:

using System.Security.Cryptography.X509Certificates;
        public static X509Certificate2 selectCert(StoreName store, StoreLocation location, string windowTitle, string windowMsg)
    {

        X509Certificate2 certSelected = null;
        X509Store x509Store = new X509Store(store, location);
        x509Store.Open(OpenFlags.ReadOnly);

        X509Certificate2Collection col = x509Store.Certificates;
        X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(col, windowTitle, windowMsg, X509SelectionFlag.SingleSelection);

        if (sel.Count > 0)
        {
            X509Certificate2Enumerator en = sel.GetEnumerator();
            en.MoveNext();
            certSelected = en.Current;
        }

        x509Store.Close();

        return certSelected;
    }

Твой

(я использую визуальную студию...)

0
Dennis 25 Мар 2020 в 17:33

1 ответ

  1. Добавьте ссылку на System.Security.dll, чтобы использовать класс X509Certificate2UI.

  2. вы можете использовать foreach

if (sel.Count > 0){
  foreach(var cert in sel){
    certSelected = cert ;
  }
}
  1. вы можете сделать его еще короче при использовании linq
using System.Linq;
...

if (sel.Count > 0){
  return sel.FirstOrDefault();
}

0
Daniel Fisher lennybacon 3 Апр 2020 в 12:32
Вам не нужно использовать условие if во втором примере. Просто выстрелите FirstOrDefault.
 – 
Crypt32
3 Апр 2020 в 12:49
Правильный. Я просто использовал его для ссылки на существующий код.
 – 
Daniel Fisher lennybacon
6 Апр 2020 в 10:39