以下 c# 代码不显示本地计算机中存在的证书


public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    public string Name { get; set; }
    public string HasPrivateKey { get; set; }
    public string Location { get; set; }
    public string Issuer { get; set; }

    private void button1_Click(object sender, EventArgs e)
    {
        var stores = new Dictionary<StoreName, string>()
        {
            { StoreName.My,"Personal"},
            { StoreName.Root,"Trusted roots"},
            { StoreName.TrustedPublisher,"Trusted Publishers"}
        }.Select(s => new { store = new X509Store(s.Key, StoreLocation.LocalMachine), Location = s.Value }).ToArray();
        foreach (var store in stores)
            store.store.Open(OpenFlags.ReadOnly);
        var list = stores.SelectMany(s => s.store.Certificates.Cast<X509Certificate2>().Select(mCert => new Form1
        {
            HasPrivateKey = mCert.HasPrivateKey ? "Yes" : "No",
            Name = mCert.FriendlyName,
            Location = s.Location,
            Issuer = mCert.Issuer
        })).ToList();

    }
}

我在 c# 中使用了 Windows 窗体应用程序。如果我单击该按钮,它必须将本地计算机中存在的可用证书显示在列表框中。但是我不知道如何显示可用的证书。请提出建议。

  1. 为每个证书创建一个新的 Form1 实例。
  2. 您不引用任何现有的列表框

试试这个:

public partial class Form1 : Form
{
    //declare new listbox
    ListBox lbCerts;
    public Form1()
    {
        InitializeComponent();
        //add a listbox to the form
        lbCerts = new ListBox();
        lbCerts.DisplayMember = "Name";
        this.Controls.Add(lbCerts);
    }
    //class represent certificate
    class myCer
    {
        public string Name { get; set; }
        public string HasPrivateKey { get; set; }
        public string Location { get; set; }
        public string Issuer { get; set; }
    }
    private void button1_Click(object sender, EventArgs e)
    {
        var stores = new Dictionary<StoreName, string>()
            {
                { StoreName.My,"Personal"},
                { StoreName.Root,"Trusted roots"},
                { StoreName.TrustedPublisher,"Trusted Publishers"}
            }.Select(s => new { store = new X509Store(s.Key, StoreLocation.LocalMachine), Location = s.Value }).ToArray();
        foreach (var store in stores)
            store.store.Open(OpenFlags.ReadOnly);
        //create list of myCer
        var list = stores.SelectMany(s => s.store.Certificates.Cast<X509Certificate2>().Select(mCert => new myCer
        {
            HasPrivateKey = mCert.HasPrivateKey ? "Yes" : "No",
            Name = mCert.FriendlyName,
            Location = s.Location,
            Issuer = mCert.Issuer
        })).ToList();
        //populate listbox
        lbCerts.DataSource = list;
    }
 }

相关内容

最新更新