我能夠通過使用以下語句在特定商店中獲取證書集合。獲取C#中的證書存儲名稱列表
X509Store.Certificates
但不知道怎樣才能得到當前用戶或本地計算機根據目前的證書存儲區名稱的列表。我也檢查了StoreName枚舉,但它只列出了標準的商店名稱,但沒有列出用戶定義的名稱。
我想獲得CERTIFICATE STORES的列表,而不是特定商店中的證書列表。
我能夠通過使用以下語句在特定商店中獲取證書集合。獲取C#中的證書存儲名稱列表
X509Store.Certificates
但不知道怎樣才能得到當前用戶或本地計算機根據目前的證書存儲區名稱的列表。我也檢查了StoreName枚舉,但它只列出了標準的商店名稱,但沒有列出用戶定義的名稱。
我想獲得CERTIFICATE STORES的列表,而不是特定商店中的證書列表。
http://msdn.microsoft.com/en-us/library/aa376058(VS.85).aspx
不要以爲有這樣的管理方式.NET。可能最接近使用.net的註冊表函數從註冊表中讀取商店名稱?
您可以從C#代碼調用Powershell腳本。下面是一個示例函數(您需要在項目System.Management.Automation集的引用添加),返回證書存儲的列表LOCALMACHINE:
private static String[] GetLocalMachineStoresNames()
{
List<String> names;
using (RunspaceInvoke runtimeInvoke = new RunspaceInvoke())
{
Collection<PSObject> results = runtimeInvoke.Invoke(@" cd cert:\LocalMachine; dir | % { $_.Name }");
names = new List<String>();
for (Int32 q = 0; q < results.Count; q++)
{
names.Add(results[q].BaseObject.ToString());
}
}
return names.ToArray();
}
另一個很好的例子是獲取商店名稱,但需要PowerShell來執行此操作。 – Imran 2012-04-10 23:02:29
正如dotalchemy提到的,你必須閱讀的名字註冊表。看看下面的站點位置: https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx
例如,CERT_SYSTEM_STORE_LOCAL_MACHINE位於
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates
這裏是如何獲得的名稱/存儲
using (var rootKeySystemCertificates = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\SystemCertificates", false))
{
foreach (var subKeyName in rootKeySystemCertificates.GetSubKeyNames())
{
var store = new X509Store(subKeyName, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
//your part with store.Certificates...
store.Close();
}
}
感謝這確實解決了我的問題。 – Imran 2010-10-29 19:00:50
酷!點擊數字左上方的小箭頭:) – dotalchemy 2010-10-29 19:13:41