在C#中读取注册表项

我正在读取注册表项的值:

Microsoft.Win32.RegistryKey key; key = *someLongPathHere*; 

并将值显示到标签:

 string a = (string)key.GetValue("");//a default value label1.Text = a; 

它显示:

 {F241C880-6982-4CE5-8CF7-7085BA96DA5A} 

这是最正确的,除了第一个下划线,它存在于原始值中:

 {_F241C880-6982-4CE5-8CF7-7085BA96DA5A} 

为什么会这样? 即缺少下划线?

此外,在阅读密钥后,我是否必须关闭密钥或其他任何东西? 我该怎么做?

很容易测试包含下划线的字符串值是否存在系统性问题。 您可以在注册表编辑器中创建这样的值,然后使用GetValue()将其读入您的C#程序。 当您这样做时,您将发现C#注册表代码不会丢失下划线。 因此,必须对您的问题进行一些其他解释。

我最好的猜测是你的标签组件不显示下划线。 我对C#UI框架不是很熟悉,但这似乎是合理的。 尝试查看调试器下的a值而不是UI上的标签标题。

另一件事是您有注册表重定向,因为您在x64上运行了x86进程,并且您的密钥位于重定向密钥HKLM \ Software下。 也许如果你看看Wow6432Node,你会看到下划线的差异。

至于管理密钥的生命,密钥由无人资源支持。 即Windows HKEYRegistryKey类实现了IDisposable ,因此您应该将键包装在using语句中。