0

我问这个是因为我很绝望,而且我在任何地方都找不到任何谈论这个问题的帖子。

在我的 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 XP 到 Windows 8.1,这在每个 Windows 版本上都非常有效。在 Windows 10 中,它可以在第一次尝试时运行。如果我再做一次,它会卡住等待。

我试图实现一个 60 秒的“超时计时器”:提供的一段代码只是超时了。

如果用户从 PC 中取出包含证书的 USB 密钥(或智能卡)并重新插入,问题就解决了。

有没有人对此行为有解决方案?我很绝望,我升级到 Windows 10 的客户对我很生气,我不知道该怎么办。

4

1 回答 1

0

我终于找到了解决这个 Windows 10 错误的方法。它实际上是一种“解决方法”,但 100% 有效并且不会导致任何问题。

解决方法是在您的应用程序中创建一个“全局”X509Store 存储,并且永远不要关闭它。您只需在第一次需要时打开(或在应用程序启动时),从不调用“store.Close();”

您可以在应用程序的所有会话期间调用 store.Certificates.Find(....) ,如果您关闭商店并重新打开,它将永远不会显示发生的问题。也许不是一个漂亮的解决方案,但可以 100% 工作。我希望这会帮助像我一样发现这个该死的 win10 错误的人。

于 2015-12-07T14:01:16.807 回答