2013-09-25 147 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();