2012-02-29 41 views
13

Tôi có chìa khóa sau trong registry của tôi:Registry.GetValue luôn trả về null

dưới: HKEY_LOCAL_MACHINE\SOFTWARE\RSA Tôi có gọi đối tượng giá trị - WebExControlManagerPath và giá trị của nó là c:\

Tôi cố gắng để làm điều này:

var r = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\RSA", "WebExControlManagerPth",null); 

if(r!=null) 
    ProcessAsUser.Launch(ToString()); 

Nhưng giá trị r luôn là giá trị rỗng.

enter image description here

Bất kỳ ý tưởng nào?

+0

tôi cố gắng này và nó cũng trở Null – MoShe

Trả lời

18

Bạn không truy cập vào hòm HKEY_LOCAL_MACHINE giống như cách bạn thực hiện trong C# như trong kịch bản lệnh batch. Bạn gọi Registry.LocalMachine, như vậy:

 RegistryKey myKey = Registry.LocalMachine.OpenSubKey(@"Software\RSA", false); 
     String value = (String)myKey.GetValue("WebExControlManagerPth"); 

     if (!String.IsNullOrEmpty(value)) 
     { 
      ProcessAsUser.Launch(ToString()); 
     } 

Cập nhật:

Nếu nó trả về null, thiết lập kiến ​​trúc xây dựng của bạn để Bất kỳ CPU. Hệ điều hành có thể ảo hóa các đăng ký 32 bit và 64 bit một cách khác nhau. Xem: http://msdn.microsoft.com/en-us/library/windows/desktop/aa965884%28v=vs.85%29.aspx, Reading 64bit Registry from a 32bit applicationhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms724072%28v=vs.85%29.aspx.

+0

Thử it - getting null .... – MoShe

+0

Tôi chỉ cần tải lên ảnh chụp màn hình – MoShe

+1

Bạn có đặc quyền quản trị không? Hive Local Machine yêu cầu đặc quyền quản trị để ghi vào. Tôi không chắc chắn nếu đặc quyền quản trị được yêu cầu để đọc, nhưng chúng có thể là nguyên nhân của chuỗi rỗng của bạn. JK, null cho tôi nữa. – Jason

1

xem xét các quyền bảo mật trên khóa đăng ký bằng regedt32.exe; kiểm tra xem bạn có đang chạy với tư cách quản trị viên và đã tắt UAC hay không. Theo tài liệu opensubkey, nó cần phải được mở trước khi truy cập vào bất kỳ khóa nào; http://msdn.microsoft.com/en-us/library/z9f66s0a.aspx

1

Tôi đã thêm "\" ở đầu đường dẫn của mình, đảm bảo rằng đã được đặt đúng.

29

statement của Jason là đúng, hệ điều hành là vấn đề, mã bên dưới sẽ giúp bạn giải quyết.

RegistryKey localKey; 
if(Environment.Is64BitOperatingSystem) 
    localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
else 
    localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); 

string value = localKey.OpenSubKey("RSA").GetValue("WebExControlManagerPth").ToString(); 
+1

Sửa lỗi tuyệt vời mà không cần biên dịch cho "Bất kỳ CPU nào" .. đây phải là câu trả lời hàng đầu. –

+0

FYI, điều này chỉ hoạt động trong .NET 4.0 trở lên .. – Ignatius

+1

@Ignatius, tôi đã không kiểm tra với .NET 4.0 dưới đây. Cảm ơn thông tin của bạn :) –

2

nếu bạn đang sử dụng hệ điều hành 64 bit, khi bạn đang cố gắng để có được HKEY_LOCAL_MACHINE\SOFTWARE\RSA nó thực sự tìm kiếm HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\RSA đó là lý do tại sao bạn nhận được null

+2

Nó sẽ là một câu trả lời tốt hơn, nếu bạn cũng cung cấp một số giải pháp cùng với điều này. Nếu không, vui lòng bao gồm điều này làm nhận xét cho câu hỏi. –