none
为什么用 StoreLocation.LocalMachine 没有告警信息, 而用 StoreLocation.CurrentUser 却有告警信息? RRS feed

  • 问题

  • 各位:

    我用C#编写一个程序,来安装一个数字证书到StoreLocation.CurrentUser的 StoreName.Root 下面, 源代码如下:


                X509Certificate2 cert = new X509Certificate2(System.IO.Directory.GetCurrentDirectory()+"\\ZPH.cer");
                X509Store store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);

                store.Open(OpenFlags.ReadWrite);
                store.Add(cert);

                store.Close();
    当程序运行时,我发现总是弹出一个对话框提醒用户一个证书将安装到Root Store,请用户确认。

    可是,我稍微修改了一下代码:

                X509Certificate2 cert = new X509Certificate2(System.IO.Directory.GetCurrentDirectory()+"\\ZPH.cer");
                X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);

                store.Open(OpenFlags.ReadWrite);
                store.Add(cert);

                store.Close();
    当程序再次运行时,我发现那个告警对话框没有了!并且更神奇的是:这个数字证书并同时安装到了Local Machine的 Root store 和 Current User的Root store 中!!

    这难道不像是一个Bug吗?为什么第一种情况有告警提示,而第二种情况却没有呢?要知道第二种情况做的事情更多,且实现了第一种情况的功能。

    先谢谢了!

    2012年6月29日 1:42

答案

全部回复