20120425

[解法] CryptoAPI Error: Container not exist.


使用 Crypto 元件去呼叫 wincrypt api 時,
要簽章製作密文的那時間,需要用到金鑰容器(Container)

此容器其實是 windows 作業系統中的一個小小檔案,
在不明原因毀損或遺失之後,
被應用程式或應用API 呼叫時,會再產生一個不正確的。
於是之後再怎麼用都會出現 『The Container does not exist』訊息。
Error Code: -2146893802

毀損或遺失的事件幾乎不會發生,
一旦發生卻很苦惱。

處理方法:(二選一 )

1. 另建一新的使用者帳號,匯入憑證
-- 匯入的瞬間會產生正確的容器/之後即可使用
-- 但是這樣做並不太方便
2. 移除現有容器
-- 移除憑證然後重新匯入有效憑證
-- 如此會在匯入的瞬間產生正確的容器
-- 這方法比較能接受,但操作上比較繁瑣

以下是方法 2 的兩個重點:
1. 檔案總管 / 工具 / 資料夾選項 / 檢視 /
-- 取消勾選 隱藏保護的作業系統檔案
-- 點選 顯示所有檔案和資料夾
-- 然後套用
2. 容器( container )的所在位置
-- 如果是Win7/Vista :
-- 放在\Users\(使用者名)\AppData\Roaming\Microsoft\Crypto\RSA
-- 如果是更早之前版本如XP :
-- 放在 Document and Settings\(使用者名)
 \Application Data\Microsoft\Crypto\RSA
-- 清除 RSA 的內容即可
-- 之後再執行憑證移除與匯入,就可以使用了。

#

2 則留言:

  1. 今天我也遇上了這個問題,發現是憑證過期,新舊憑證都在裡面,
    用方法2,但很簡便,
    只要開啟IE進到 網際網路選項 > 內容 > 憑證
    將新舊兩張憑證都先移除,再重新匯入新的那張憑證,
    這樣就恢復正常了。超簡便!!

    回覆刪除