C#注册表操作

代码
using System;

using System.Security.Permissions;//权限判断
using Microsoft.Win32;//操作注册表

//[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,ViewAndModify = "HKEY_CURRENT_USER")]

namespace AppSetting
{
 
/// <summary>
 
/// 注册表示例
 
/// Windows Registry Editor Version 5.00
 
///
 
///[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Executive]
 
///"AdditionalCriticalWorkerThreads"=dword:00000000
 
///"AdditionalDelayedWorkerThreads"=dword:00000000
 
///"PriorityQuantumMatrix"=hex:30,bf,44,a8,00,00,00,00,72,6f,c7,01
 
/// </summary>
 public class RegistryManager
 {
  
public RegistryManager()
  {
   
  }
  
public static bool AppSettingsInit()
  {
   
//创建LocalMachine->SOFTWARE->Flybird
   string sBaseKey = "LocalMachine";
   
string sSubKey = @"SOFTWARE\Flybird\Pecker";
   RegistryManager.CreateSubKey(
"LocalMachine",@"SOFTWARE\Flybird\Pecker");
   
//添加值
   RegistryManager.SetKeyValue(sBaseKey,sSubKey,"Register","1234567890");
   
//读取值
   
//string sValue = (string)RegistryManager.GetKeyValue(sBaseKey,sSubKey,"Register");
   
//MessageBox.Show(sValue);
   return true;
  }
  
/// <summary>
  
/// 得到主键对应的RegistryHive
  
/// </summary>
  
/// <param name="sBaseKey"></param>
  
/// <returns></returns>
  public static RegistryHive GetBaseHive(string sBaseKey)
  {
   RegistryHive baseRegHive 
= new RegistryHive();
   
switch(sBaseKey)
   {
    
case "ClassesRoot":
     baseRegHive 
= RegistryHive.ClassesRoot;
     
break;
    
case "CurrentConfig":
     baseRegHive 
= RegistryHive.CurrentConfig;
     
break;
    
case "CurrentUser":
     baseRegHive 
= RegistryHive.CurrentUser;
     
break;
    
case "DynData":
     baseRegHive 
= RegistryHive.DynData;
     
break;
    
case "LocalMachine":
     baseRegHive 
= RegistryHive.LocalMachine;
     
break;
    
case "PerformanceData":
     baseRegHive 
= RegistryHive.PerformanceData;
     
break;
    
case "Users":
     baseRegHive 
= RegistryHive.Users;
     
break;
    
default:
     baseRegHive 
= RegistryHive.LocalMachine;
     
break;
   }
   
return baseRegHive;
  }
  
/// <summary>
  
/// 权限判断
  
/// </summary>
  
/// <param name="sBaseKey"></param>
  
/// <param name="sSubKey"></param>
  public static void AddPermission(string sBaseKey,string sSubKey)
  {
   
//权限判断
   /*
   RegistryPermission regPermission = new RegistryPermission(
    RegistryPermissionAccess.Write|RegistryPermissionAccess.Read,  
    "HKEY_LOCAL_MACHINE\\SOFTWARE\\Rational   Software\\Rose\\0");    
   regPermission.AddPathList(;
   
*/
  }
  
/// <summary>
  
/// 得到指定主键和子键的对象值
  
/// </summary>
  
/// <returns></returns>
  public static object GetKeyValue(string sBaseKey,string sSubKey,string sObject)
  {
   
object   objResult = null;
   
try
   {    
    RegistryKey   SUBKEY;  
    RegistryHive baseRegHive 
= GetBaseHive(sBaseKey);
    RegistryKey   BASEKEY   
=   RegistryKey.OpenRemoteBaseKey(baseRegHive,String.Empty);
    SUBKEY   
=   BASEKEY.OpenSubKey(sSubKey);    
    objResult   
=   SUBKEY.GetValue(sObject);
    SUBKEY.Close();
    BASEKEY.Close();
   }
   
catch
   {
    
return null;
   }
   
return objResult;
  }
  
/// <summary>
  
/// 设定指定主键和子键的对象值
  
/// </summary>
  
/// <returns></returns>
  public static bool SetKeyValue(string sBaseKey,string sSubKey,string sObject,object Value)
  {
   
try
   {
    RegistryKey   SUBKEY;    
    RegistryHive baseRegHive 
= GetBaseHive(sBaseKey);
    RegistryKey   BASEKEY   
=   RegistryKey.OpenRemoteBaseKey(baseRegHive,String.Empty);
    SUBKEY   
=   BASEKEY.OpenSubKey(sSubKey,true);
    SUBKEY.SetValue(sObject,Value);
    SUBKEY.Close();
    BASEKEY.Close();
   }
   
catch(Exception ex)
   {
    Console.WriteLine(ex.Message);
    
return false;
   }
   
return true;
  }
  
/// <summary>
  
/// 创建子键
  
/// </summary>
  
/// <param name="sBaseKey"></param>
  
/// <param name="sSubKey"></param>
  
/// <returns></returns>
  public static bool CreateSubKey(string sBaseKey,string sSubKey)
  {
   
try
   {
    RegistryKey   SUBKEY;    
    RegistryHive baseRegHive 
= GetBaseHive(sBaseKey);
    RegistryKey   BASEKEY   
=   RegistryKey.OpenRemoteBaseKey(baseRegHive,String.Empty);
    SUBKEY 
= BASEKEY.CreateSubKey(sSubKey);
    SUBKEY.Close();
    BASEKEY.Close();
   }
   
catch
   {
    
return false;
   }
   
   
return true;
  }
  
public static void Test()
  {
   
//创建子键
   RegistryKey test9999 = Registry.CurrentUser.CreateSubKey("Test9999");
   
//创建子键的子键
   
// keys are disposed when execution exits the using statement.
   using(RegistryKey testName = test9999.CreateSubKey("TestName"),
       testSettings 
= test9999.CreateSubKey("TestSettings"))
   {
    
// Create data for the TestSettings subkey.
    testSettings.SetValue("Language""French");
    testSettings.SetValue(
"Level""Intermediate");
    testSettings.SetValue(
"ID"123);
   }

   
//打印当前子键的所有子键信息
   Console.WriteLine("There are {0} subkeys under {1}.",
    test9999.SubKeyCount.ToString(), test9999.Name);
   
foreach(string subKeyName in test9999.GetSubKeyNames())
   {
    
using(RegistryKey tempKey = test9999.OpenSubKey(subKeyName))
    {
     Console.WriteLine(
"\nThere are {0} values for {1}.",
      tempKey.ValueCount.ToString(), tempKey.Name);
     
foreach(string valueName in tempKey.GetValueNames())
     {
      Console.WriteLine(
"{0,-8}: {1}", valueName,
       tempKey.GetValue(valueName).ToString());
     }
    }
   }

   
using(RegistryKey testSettings = test9999.OpenSubKey("TestSettings"true))
   {
    
//删除某子键的某项值
    testSettings.DeleteValue("id");
    
//检索删除值
    Console.WriteLine((string)testSettings.GetValue("id""ID not found."));
   }

   
//删除子键树(包括下面所有节点)
   Console.Write("\nDelete newly created registry key? (Y/N) ");
   
if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
   {
    Registry.CurrentUser.DeleteSubKeyTree(
"Test9999");
    Console.WriteLine(
"\nRegistry key {0} deleted.",
     test9999.Name);
   }
   
else
   {
    Console.WriteLine(
"\nRegistry key {0} closed.",
     test9999.ToString());
    test9999.Close();
   }
  }
 }
}

 

posted @ 2010-07-01 11:23  风叙  阅读(247)  评论(0)    收藏  举报