2013-09-25 149 views
1

我使用下面的代码写入到与C#.NET 4.0作为Windows 7的管理员现有的注册表项:C#写注册表

Microsoft.Win32.Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MY\\SOFTWARE\\Name", "key_name", "key_value");

这似乎工作得很好,但我已经看到网络上的其他人声称你需要做一个Registry.Close()或它不会工作。

我是否真的需要OpenSubKeyClose这个关键点是否已经显现出来了?

我不是在抱怨我的代码有效,我只是想了解最佳实践。

回答

4

从MSDN: http://msdn.microsoft.com/en-us/library/5a5t63w8.aspx

setValue方法打开一个注册表项,设置值,每次调用时关闭键。如果您需要修改大量值,RegistryKey.SetValue方法可能会提供更好的性能。 RegistryKey类还提供了一些方法,使您可以将访问控制列表(ACL)添加到注册表项中,在检索值之前测试值的数据类型以及删除键。

0

它是一个很好的习惯来关闭所创建的按键。例如。

//not actual code 
Key1.Create() 
Key 2 = Key1.SetValue(); 
and so on 

所以,你只需要逆序关闭密钥。从孩子到父母

2

如果您使用的是Registry类的静态方法,那么您不必显式关闭它,因为它本身会执行此操作。从MSDN

在.NET Framework 2.0版,注册类也包含从注册表项设置和检索值 静态的GetValue和的SetValue方法。这些方法打开并关闭每个使用它们的注册表项。

但是,如果情况并非如此,那么在注册表中调用clise将关闭该密钥并将其刷新到磁盘,如果其内容已被修改。例如

RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample"); 
rk.Close();