注册表同ini文件一样,存储软件的系统信息以及包含版本等
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;

namespace Beasyer.Lib

...{
public static class RegistryKeyHelper

...{
public static RegistryKey OpenOrCreateRegistrKey(RegistryKey rk, string key, bool writable)

...{
RegistryKey rkchild = rk.OpenSubKey(key, writable);
if (rkchild != null)

...{
return rkchild;
}
else

...{
return rk.CreateSubKey(key, writable ? RegistryKeyPermissionCheck.ReadWriteSubTree : RegistryKeyPermissionCheck.ReadSubTree);
}
}


/**//// <summary>
/// 删除rk节点下的所有含key的节点
/// </summary>
/// <param name="rk"></param>
/// <param name="key"></param>
public static void DeleteRegistrKey(RegistryKey rk, string key)

...{
string[] strr = rk.GetSubKeyNames();
foreach (string str in strr)

...{
if (str == key)

...{
rk.DeleteSubKeyTree(str);
}
else

...{
DeleteRegistrKey(rk.OpenSubKey(str, true), key);
}
}
}


/**//// <summary>
/// 删除rk节点下的所有含key的值
/// </summary>
/// <param name="rk"></param>
/// <param name="key"></param>
public static void DeleteRegistrKeyValues(RegistryKey rk, string key)

...{
rk.DeleteValue(key,false);
string[] strr = rk.GetSubKeyNames();
foreach (string str in strr)

...{
DeleteRegistrKeyValues(rk.OpenSubKey(str, true), key);
}
}

private static void GetRegistryKeys(RegistryKey rk, string key, ref List<RegistryKey> li)

...{
string[] strr = rk.GetSubKeyNames();
foreach (string str in strr)

...{
if (str == key)

...{
li.Add(rk.OpenSubKey(str, true));
}
else

...{
GetRegistryKeys(rk.OpenSubKey(str, true), key, ref li);
}
}
}

/**//// <summary>
/// 获取rk节点下的所有含key的节点
/// </summary>
/// <param name="rk"></param>
/// <param name="key"></param>
/// <returns></returns>
public static RegistryKey[] GetRegistryKeys(RegistryKey rk, string key)

...{
List<RegistryKey> li = new List<RegistryKey>();
GetRegistryKeys(rk, key, ref li);
return li.ToArray();
}


/**//// <summary>
/// 更新rk节点下的所有含childRegistryKey子节点的含key的值为value
/// </summary>
/// <param name="rk"></param>
/// <param name="childRegistryKey"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="rvk"></param>
public static void UpdateRegistrKeyValues(RegistryKey rk,string childRegistryKey, string key, object value,RegistryValueKind rvk)

...{
List<RegistryKey> li = new List<RegistryKey>();
GetRegistryKeys(rk, childRegistryKey, ref li);
foreach (RegistryKey rkchild in li)

...{
rkchild.SetValue(key, value, rvk);
}
}

private static void GetCurrentRegistryKeyValues(RegistryKey rk, string key, ref List<string> li)

...{
string[] strr = rk.GetValueNames();
foreach (string str in strr)

...{
if (str == key)

...{
object o=rk.GetValue(str);
li.Add(o == null ? string.Empty : o.ToString());
}
}
}
private static void GetRegistryKeyValues(RegistryKey rk,string key,ref List<string> li)

...{
GetCurrentRegistryKeyValues(rk, key, ref li);

string[] strr = rk.GetSubKeyNames();
foreach (string str in strr)

...{
GetRegistryKeyValues(rk.OpenSubKey(str, true), key, ref li);
}
}

/**//// <summary>
/// 获取rk节点下的所有含key的值
/// </summary>
/// <param name="rk"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string[] GetRegistryKeyValues(RegistryKey rk, string key)

...{
List<string> li = new List<string>();
GetRegistryKeyValues(rk,key);
return li.ToArray();
}
}
}











































































































































































