C#读,写,删除注册表

时间:2021-06-26 15:26:52

1.首先,必须导入空间"Microsoft.Win32"

[csharp] view plaincopyC#读,写,删除注册表C#读,写,删除注册表
  1. using Microsoft.Win32;  


 

 2.利用Registry类,确定注册表的分支(ClassesRoot,CurrentUser,Users,LocalMachine,CurrentConfig)

[csharp] view plaincopyC#读,写,删除注册表C#读,写,删除注册表
  1. RegistryKey key = Registry.LocalMachine;  


3.创建/打开/删除注册表项

[csharp] view plaincopyC#读,写,删除注册表C#读,写,删除注册表
  1. RegistryKey key = Registry.LocalMachine;  
  2. //创建  
  3. //注意:注册表路径一定是"\\"而不是"\"  
  4. RegistryKey software = key.CreateSubKey("software\\MyApp");  
  5.   
  6. //打开(true表示可以写入)  
  7. RegistryKey software = key.OpenSubKey("software\\MyApp",true);   
  8. RegistryKey Product = software.CreateSubKey("Product");  
  9.   
  10. //删除  
  11. key.DeleteSubKey("software\\MyApp",true);  
  12. //记得关闭,两个都要关  
  13. key.Close();  
  14. ProductID.Close();  


4.创建/打开/删除键值

[csharp] view plaincopyC#读,写,删除注册表C#读,写,删除注册表
  1. RegistryKey key = Registry.LocalMachine;  
  2. RegistryKey software = key.OpenSubKey("software\\My",true);   
  3. //写入  
  4. software.SetValue("ProductID""Leo Tian's blog");   
  5. //读取  
  6. string info = "";  
  7. info = software.GetValue("ProductID").ToString();  
  8. //删除  
  9. software.DeleteValue("test");  
  10. //关闭  
  11. software.Close()  


5.最后贴出两个判断函数

[csharp] view plaincopyC#读,写,删除注册表C#读,写,删除注册表
  1. //判断项目是否存在  
  2. private bool IsRegeditItemExist(RegistryKey RegBoot, string ItemName)  
  3. {  
  4.     if (ItemName.IndexOf("\\") <= -1)  
  5.     {  
  6.         string[] subkeyNames;  
  7.         subkeyNames = RegBoot.GetValueNames();  
  8.         foreach (string ikeyName in subkeyNames)  //遍历整个数组  
  9.         {  
  10.             if (ikeyName == ItemName) //判断子项的名称  
  11.             {  
  12.                 return true;  
  13.             }  
  14.         }  
  15.         return false;                 
  16.     }  
  17.     else  
  18.     {  
  19.         string[] strkeyNames = ItemName.Split('\\');  
  20.         RegistryKey _newsubRegKey = RegBoot.OpenSubKey(strkeyNames[0]);  
  21.         string _newRegKeyName = "";  
  22.         int i;  
  23.         for(i=1;i<strkeyNames.Length;i++)  
  24.         {  
  25.             _newRegKeyName = _newRegKeyName + strkeyNames[i];  
  26.             if(i!=strkeyNames.Length-1)  
  27.             {  
  28.                 _newRegKeyName = _newRegKeyName + "\\";  
  29.             }  
  30.         }  
  31.         return IsRegeditItemExist(_newsubRegKey,_newRegKeyName);  
  32.     }  
  33. }  
  34.   
  35. //判断键值是否存在  
  36. private bool IsRegeditKeyExist(RegistryKey RegBoot, string RegKeyName)  
  37. {  
  38.   
  39.     string[] subkeyNames;  
  40.     subkeyNames = RegBoot.GetValueNames();  
  41.     foreach (string keyName in subkeyNames)  
  42.     {  
  43.   
  44.         if (keyName == RegKeyName)  //判断键值的名称  
  45.         {  
  46.             return true;  
  47.         }  
  48.     }  
  49.     return false;  
  50. }