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 秒の「タイムアウト タイマー」を実装しようとしました: 提供されたコードはちょうどタイムアウトします。

ユーザーが証明書を含む USB キー (またはスマートカード) を PC から取り外し、再度挿入すると、問題は解決されます。

誰かがこの動作の解決策を持っていますか? Windows 10 にアップグレードする顧客は私に腹を立てており、どうすればよいかわかりません。

4

1 に答える 1

0

この Windows 10 のバグの解決策をついに見つけました。これは実際には「回避策」ですが、100% 機能し、問題は発生しません。

回避策は、アプリケーションに「グローバル」X509Store ストアを作成し、絶対に閉じないことです。初めて必要なとき (またはアプリの起動時) に開くだけで、「store.Close();」を呼び出さないでください。

アプリケーションのすべてのセッション中に store.Certificates.Find(....) を呼び出すことができ、ストアを閉じて再度開いた場合に発生する問題は表示されません。たぶん美しい解決策ではありませんが、100%機能します。これが、私のように、このいまいましい win10 のバグを見つけた人の助けになることを願っています。

于 2015-12-07T14:01:16.807 に答える