我已经看过现有的主题,所以请尽量避免在这里丢弃链接。
我想获得registry项的价值 – 简单明了。 这是我迄今为止。
registry: 1)下了一个密钥
CURRENT_USER \ SOFTWARE \ Custom_Subkey \ Custom_Value \ Custom_key \ STRING_VALUE
我正在试图findstring_value
string reg_subKey = "Software\\Custom_Subkey\\Custom_Value"; RegistryKey root = Registry.CurrentUser.CreateSubKey(reg_subKey); foreach (string keyname in root.GetValueNames()) { textBox4.AppendText(keyname.ToString() + Environment.NewLine); // Appends the following data to textBox4 once the foreach is completed: // Header1 // Header2 // Header3 // Header4 // Header5 // Now I want to get the VALUES of each header: using (RegistryKey key = root.OpenSubKey(keyname)) { **// THIS LINE GETS HIGHLIGHTED WITH THE FOLLOWING ERROR: "Object reference not set to an instance of an object.**" MessageBox.Show(key.ValueCount.ToString()); } }
希望这是一个简单的修复。 我期待听到你的回应。 谢谢,埃文
我相信你想在循环中的root.GetSubKeyNames()
不GetValueNames()
虽然值正在努力获得值,我会建议下面的循环:
foreach(string keyname in root.GetSubKeyNames()) { // use key to get value and set textbox4 using (RegistryKey key = root.OpenSubKey(keyname)) { MessageBox.Show(key.ValueCount.ToString()); } }
如果未找到指定的子项,则OpenSubKey
方法不会引发异常。 相反,它只是返回null
。 作为程序员的责任是确保通过检查方法调用的返回值来找到并打开相应的键。
因此,我的怀疑是您指定的注册表项是无效的。 打开注册表编辑器( regedt32.exe
),并确认您可以完全按照书面在注册表中找到该注册表项。
如果您发现注册表项确实位于您认为的位置,则问题可能与WOW64子系统有关,该子系统允许64位版本的Windows运行64位应用程序。 如果该值是通过32位程序写入注册表的,则无法使用64位程序的上述代码读取该值(反之亦然)。 检查这个最简单的方法是更改项目的编译设置。 例如,如果您当前正在编译x86,则更改为编译x64,反之亦然。 注册表重定向也可能会阻碍你的发展。 这也将检查。
我想要的是同样的东西,你的代码帮助了我,但正如你所说的那样,它不能正常工作。 所以,我做了一些修改,我认为它现在正常工作! 尝试这个:
//Just make the reference until "custom_subkey", not to the next one ("custom value") string reg_subKey = "Software\\Custom_Subkey"; RegistryKey root = Registry.CurrentUser.CreateSubKey(reg_subKey); //Use GetSubKeyNames, instead of GetValueNames, because now you are in a higher level foreach (string keyname in root.GetSubKeyNames()) { using (RegistryKey key = root.OpenSubKey(keyname)) { foreach (string valueName in key.GetValueNames()) { MessageBox.Show(valueName); MessageBox.Show(key.GetValue(valueName).ToString() ); } } }
你之前在网上搜索,发布,对吗?
例如: http : //www.codeproject.com/KB/system/modifyregistry.aspx