0

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

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}

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

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

4

1 回答 1

3

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

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

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

至于管理密钥的生命周期,密钥由未管理的资源支持。即一个 Windows HKEY。该类RegistryKey实现IDisposable,因此您应该将密钥包装在一个using语句中。

于 2012-11-23T19:55:01.700 回答