2

我正在使用以下代码在 Windows 7 上使用 C# .NET 4.0 作为管理员写入现有注册表项:

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

它似乎工作得很好,但我在网上看到其他人声称你需要这样做,Registry.Close()否则它将不起作用。

如果这似乎已经起作用,我真的需要OpenSubKey和钥匙吗?Close

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

4

3 回答 3

4

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

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

于 2013-09-25T11:54:05.083 回答
2

如果您使用 Registry 类的静态方法,那么您不必显式关闭,因为它会自行关闭。来自MSDN

在 .NET Framework 2.0 版中,Registry 类还包含用于从注册表项设置和检索值的静态 GetValue 和 SetValue 方法。这些方法在每次使用时都会打开和关闭注册表项。

但是,如果不是这种情况,则在注册表上调用 clise 将关闭密钥并将其刷新到磁盘(如果其内容已被修改)。例如

RegistryKey rk = Registry.CurrentUser.CreateSubKey("RegistryOpenSubKeyExample");
rk.Close();
于 2013-09-25T11:56:40.843 回答
0

关闭已创建的密钥是一种很好的做法。例如

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

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

于 2013-09-25T11:55:13.620 回答