2010-10-27 40 views
5

Tôi có thể lấy bộ sưu tập chứng chỉ trong kho lưu trữ hạt nhân bằng cách sử dụng bảng sau.Lấy Danh sách Tên Cửa hàng Chứng chỉ trong C#

X509Store.Certificates

Nhưng không chắc chắn làm thế nào tôi có thể nhận được danh sách các tên lưu trữ chứng chỉ hiện diện dưới dùng hiện hành hoặc máy tính cục bộ. Tôi cũng đã kiểm tra liệt kê StoreName nhưng nó chỉ liệt kê các tên cửa hàng tiêu chuẩn nhưng không liệt kê các tên cửa hàng được người dùng định nghĩa.

Tôi muốn danh sách Cửa hàng chứng nhận chứ không phải danh sách chứng chỉ trong cửa hàng cụ thể.

Trả lời

9

http://msdn.microsoft.com/en-us/library/aa376058(VS.85).aspx

Đừng nghĩ rằng có một cách .net quản lý để làm điều này. Có thể gần nhất có thể sử dụng chức năng đăng ký của .net để đọc tên cửa hàng từ sổ đăng ký?

+0

Nhờ điều này thực sự giải quyết vấn đề của tôi . – Imran

+0

Tuyệt! Nhấp vào mũi tên nhỏ lên phía trên số bên trái :) – dotalchemy

3

Bạn có thể gọi tập lệnh Powershell từ mã C#. Dưới đây là một chức năng mẫu (Bạn cần phải thêm vào dự án một tham chiếu đến assembly System.Management.Automation) trả về một danh sách các cửa hàng giấy chứng nhận cho 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(); 
    } 
+1

Một ví dụ hay hơn để lấy tên cửa hàng nhưng PowerShell được yêu cầu thực thi điều này. – Imran

0

Như dotalchemy đề cập, bạn phải đọc tên từ sổ đăng ký. Kiểm tra các trang web sau đây cho các địa điểm: https://msdn.microsoft.com/en-us/library/windows/desktop/aa388136(v=vs.85).aspx

Ví dụ CERT_SYSTEM_STORE_LOCAL_MACHINE tọa lạc tại

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates

Dưới đây là cách để có được những tên/cửa hàng

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(); 
    } 
} 
Các vấn đề liên quan