2012-11-23 127 views
-1

我读一个注册表键值:读取注册表项

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} 

为什么会发生?即缺少下划线?

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

+0

哦对,对不起,我忘了添加它们 – Chin

回答

2

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

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

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

至于管理密钥的使用寿命,密钥由非管理资源支持。即Windows HKEYRegistryKey类实现IDisposable,所以你应该把你的密钥包装在一个using声明。

+0

'a'的值也没有下划线 – Chin

+0

当我把'{_F241C880-6982-4CE5-8CF7-7085BA96DA5A}'放到一个WPF标签中时,下划线不是可见。你在使用哪种框架。 –

+0

我试过'label1.Text =“{_F241C880-6982-4CE5-8CF7-7085BA96DA5A}”;'它运作良好,所以我认为这不是问题。可能是因为'string' cast? – Chin