2009-08-12 42 views
27

tôi nhận được một null trở lại từ nỗ lực này để truy cập vào Windows Registry:Registry.LocalMachine.OpenSubKey() trả về null

using (RegistryKey registry = Registry.LocalMachine.OpenSubKey(keyPath)) 

keyPath là SOFTWARE\\TestKey

Điều quan trọng là trong registry, vậy tại sao nó không tìm thấy nó dưới hive máy địa phương?

+1

Bạn đúng cách thoát KeyPath? Có phải "SOFTWARE \\ TestKey" và không phải là "SOFTWARE \ TestKey" không? – Michael

+0

có, tôi đã đăng sai. Nó thực sự được thiết lập để sử dụng \\ – PositiveGuy

+1

Vì vậy, điều này đã làm việc trên máy tính của ông chủ của tôi tốt. Không có lý do tại sao nó không nên ở đây. Tôi đã cấp quyền truy cập tài khoản asp.net cho nó vì tôi đang chạy máy chủ web VS và vẫn trả về giá trị rỗng. – PositiveGuy

Trả lời

2

Trong nhận xét của bạn về Dana bạn đã cho biết bạn đã cấp quyền truy cập tài khoản ASP.NET. Tuy nhiên, bạn có xác minh rằng đó là tài khoản mà trang web đang chạy theo không? Mạo danh và người dùng có thể truy cập ẩn danh có thể dễ dàng bỏ qua.

MÃ chưa được kiểm tra:

Response.Clear(); 
Response.Write(Environment.UserDomainName + "\\" + Environment.UserName); 
Response.End(); 
+0

Làm cách nào để tôi có thể tìm ra tài khoản mà trang web đang chạy mà không phải viết mã để hiển thị? – PositiveGuy

+0

cũng ở trên nói chung là làm thế nào tôi khắc phục vấn đề tài khoản mặc dù tôi làm thêm một kiểm tra trong đó nó đến từ địa chỉ ip của tôi để không chỉ tất cả mọi người có thể nhìn thấy nó. –

57

Nó có thể xảy ra nếu bạn đang ở trên một máy 64-bit. Tạo một lớp helper đầu tiên (yêu cầu .NET 4.0 hoặc cao hơn):

public class RegistryHelpers 
{ 

    public static RegistryKey GetRegistryKey() 
    { 
     return GetRegistryKey(null); 
    } 

    public static RegistryKey GetRegistryKey(string keyPath) 
    { 
     RegistryKey localMachineRegistry 
      = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, 
             Environment.Is64BitOperatingSystem 
              ? RegistryView.Registry64 
              : RegistryView.Registry32); 

     return string.IsNullOrEmpty(keyPath) 
      ? localMachineRegistry 
      : localMachineRegistry.OpenSubKey(keyPath); 
    } 

    public static object GetRegistryValue(string keyPath, string keyName) 
    { 
     RegistryKey registry = GetRegistryKey(keyPath); 
     return registry.GetValue(keyName); 
    } 
} 

Cách sử dụng:

string keyPath = @"SOFTWARE\MyApp\Settings"; 
string keyName = "MyAppConnectionStringKey"; 

object connectionString = RegistryHelpers.GetRegistryValue(keyPath, keyName); 

Console.WriteLine(connectionString); 
Console.ReadLine(); 
+9

Cần lưu ý rằng câu trả lời này yêu cầu .NET 4.0 trở lên. – ganders

+1

+1 Điều này đã giúp tôi rất nhiều, cảm ơn bạn. –

+1

Cảm ơn bạn! Bạn vừa lưu lại ngày của tôi! – raven