CSharp - C# 读取注册表值崩溃

  显示原文与译文双语对照的内容

无论我是否以管理员身份运行,我的下面代码都不会失败:


var suff = Registry.LocalMachine.OpenSubKey("SoftwareMicrosoftCCMLocationServices", true);


var value = suff.GetValue("DnsSuffix").ToString();



我得到了无法解码的错误消息:

An unhandled exception of type 'System.NullReferenceException' occurred in MyApp.exe Additional information: Object reference not set to an instance of an object.

我知道这个值存在并且它包含数据。

*Edit:,所以我说它不应该是空的,因为数据存在。 如果它是空的,那么我需要知道它是空的。 因此,关于什么是 System.NullReferenceException的问题对我根本没有帮助。

时间: 原作者:

raj指出,这个问题就是这个问题,这与你的问题类似,问题是你正在打开一个 64bits 操作系统的注册表。

使用这里方法代替 (.NET 4.0或者更高版本:


public class HKLMRegistryHelper


{



 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);


 }


}



。并将你的代码替换为:


string keyPath = @"SOFTWAREMicrosoftCCMLocationServices";


string keyName ="DnsSuffix";



var value = HKLMRegistryHelper.GetRegistryValue(keyPath, keyName);



原作者:
...