证书存储 windows 10 C#
Certificates store windows 10 C#
我问这个是因为我很绝望,而且我在任何地方都找不到 post 谈论这个问题。
在我的 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 秒的 "timout timer":提供的代码段刚刚超时。
如果用户从 PC 上拔下包含证书的 USB 密钥(或智能卡)并重新插入,问题就解决了。
有人能解决这种行为吗?我很绝望,我的客户升级到 windows 10 对我很生气,我不知道该怎么办。
我终于找到了这个 Windows 10 错误的解决方案。它实际上是一个 "workaround" 但 100% 有效并且不会引起任何问题。
解决方法是在您的应用程序中创建一个 "global" X509Store 存储,并且永远不要关闭它。您只需在第一次需要时打开(或在您的应用程序启动时)并且永远不会调用 "store.Close();"
您可以在应用程序的所有会话期间调用 store.Certificates.Find(....),它永远不会显示您关闭商店并再次重新打开时发生的问题。
也许不是一个漂亮的解决方案,但 100% 有效。
我希望这能帮助像我一样发现这个该死的 win10 错误的人。
我问这个是因为我很绝望,而且我在任何地方都找不到 post 谈论这个问题。
在我的 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 秒的 "timout timer":提供的代码段刚刚超时。
如果用户从 PC 上拔下包含证书的 USB 密钥(或智能卡)并重新插入,问题就解决了。
有人能解决这种行为吗?我很绝望,我的客户升级到 windows 10 对我很生气,我不知道该怎么办。
我终于找到了这个 Windows 10 错误的解决方案。它实际上是一个 "workaround" 但 100% 有效并且不会引起任何问题。
解决方法是在您的应用程序中创建一个 "global" X509Store 存储,并且永远不要关闭它。您只需在第一次需要时打开(或在您的应用程序启动时)并且永远不会调用 "store.Close();"
您可以在应用程序的所有会话期间调用 store.Certificates.Find(....),它永远不会显示您关闭商店并再次重新打开时发生的问题。 也许不是一个漂亮的解决方案,但 100% 有效。 我希望这能帮助像我一样发现这个该死的 win10 错误的人。