2015-11-10 27 views
0

我在問這個,因爲我很絕望,在任何地方我都找不到任何關於這個問題的帖子。Certificates store windows 10 C#

在我的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的客戶對我很生氣,我不知道該怎麼做。

+0

您的智能卡是否與Windows 10兼容? – Crypt32

+0

當然,否則它不會第一次工作!我第一次使用該代碼時,我獲得了證書,選擇一個,然後用它來數字簽名文件或驗證所有者。沒問題。但是,第二次運行該代碼時,我只是一直等待。僅在Win10上。 – Fabio

+0

這是不是發生在不同的智能卡?你使用什麼智能卡?這可能是智能卡中間件的一個缺陷。 – pepo

回答

0

我終於找到了這個Windows 10錯誤的解決方案。這實際上是一種「解決方法」,但是100%可行並且不會造成任何問題。

解決方法是在您的應用程序中創建一個「全局」X509Store存儲,並且永遠不要關閉它。您只需要第一次打開(或在您的應用程序啓動時)並且永遠不要調用「store.Close();」

您可以在應用程序的所有會話期間調用store.Certificates.Find(....),並且它永遠不會顯示如果關閉存儲並再次重新打開時發生的問題。 也許不是一個美麗的解決方案,但工作100%。 我希望這能幫助像我這樣的人找到這個該死的win10錯誤。