注册表可以用来进行存储一些程序的信息,例如用户的权限、或者某些值等,可以根据个人需要进行存储和删减。
当前注册表主目录:
引用包 Wesky.Net.OpenTools 1.0.5或者以上版本
操作演示:
创建注册表项
设置注册表值
读取注册表值
删除注册表值
删除注册表项
操作演示代码
IRegistryManager registryManager = new RegistryManager();// 创建注册表项
// registryManager.CreateKey(RegistryRoot.CurrentUser, @"Wesky\MyApp");// 设置注册表值
// registryManager.SetValue(RegistryRoot.CurrentUser, @"Wesky\MyApp", "MyValue", "Hello, Registry!");// 读取注册表值
// var value = registryManager.GetValue(RegistryRoot.CurrentUser, @"Wesky\MyApp", "MyValue");
// Console.WriteLine($"读取到的注册表值:{value}");// 删除注册表值
// registryManager.DeleteValue(RegistryRoot.CurrentUser, @"Wesky\MyApp", "MyValue");// 删除注册表项
registryManager.DeleteKey(RegistryRoot.CurrentUser, @"Wesky\MyApp");
Console.WriteLine("Over");
Console.ReadKey();
核心包内源码:
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]private static extern int RegCreateKeyEx(IntPtr hKey,string lpSubKey,int Reserved,string lpClass,int dwOptions,int samDesired,IntPtr lpSecurityAttributes,out IntPtr phkResult,out int lpdwDisposition);[DllImport("advapi32.dll", CharSet = CharSet.Auto)]private static extern int RegOpenKeyEx(IntPtr hKey,string lpSubKey,int ulOptions,int samDesired,out IntPtr phkResult);[DllImport("advapi32.dll", CharSet = CharSet.Auto)]private static extern int RegCloseKey(IntPtr hKey);[DllImport("advapi32.dll", CharSet = CharSet.Auto)]private static extern int RegSetValueEx(IntPtr hKey,string lpValueName,int Reserved,int dwType,byte[] lpData,int cbData);[DllImport("advapi32.dll", CharSet = CharSet.Auto)]private static extern int RegGetValue(IntPtr hKey,string lpSubKey,string lpValue,int dwFlags,out int pdwType,StringBuilder pvData,ref int pcbData);[DllImport("advapi32.dll", CharSet = CharSet.Auto)]private static extern int RegDeleteKey(IntPtr hKey, string lpSubKey);[DllImport("advapi32.dll", CharSet = CharSet.Auto)]private static extern int RegDeleteValue(IntPtr hKey, string lpValueName);/// <summary>/// 获取注册表根键/// Get registry root key/// </summary>/// <param name="root"></param>/// <returns></returns>/// <exception cref="ArgumentOutOfRangeException"></exception>private IntPtr GetRegistryRootKey(RegistryRoot root){switch (root){case RegistryRoot.ClassesRoot:return HKEY_CLASSES_ROOT;case RegistryRoot.CurrentUser:return HKEY_CURRENT_USER;case RegistryRoot.LocalMachine:return HKEY_LOCAL_MACHINE;case RegistryRoot.Users:return HKEY_USERS;case RegistryRoot.CurrentConfig:return HKEY_CURRENT_CONFIG;default:throw new ArgumentOutOfRangeException(nameof(root), root, null);}}/// <summary>/// 创建注册表键/// Create registry key/// </summary>/// <param name="root"></param>/// <param name="subKey"></param>/// <exception cref="Exception"></exception>public void CreateKey(RegistryRoot root, string subKey){IntPtr hKey = GetRegistryRootKey(root);int result = RegCreateKeyEx(hKey, subKey, 0, null, REG_OPTION_NON_VOLATILE, KEY_WRITE, IntPtr.Zero, out IntPtr phkResult, out _);if (result != ERROR_SUCCESS){throw new Exception("创建注册表key失败。 Failed to create registry key.");}RegCloseKey(phkResult);}/// <summary>/// 删除注册表键/// Delete registry key/// </summary>/// <param name="root"></param>/// <param name="subKey"></param>/// <exception cref="Exception"></exception>public void DeleteKey(RegistryRoot root, string subKey){IntPtr hKey = GetRegistryRootKey(root);int result = RegDeleteKey(hKey, subKey);if (result != ERROR_SUCCESS){throw new Exception("删除注册表key失败。Failed to delete registry key.");}}/// <summary>/// 设置注册表值/// Set registry value/// </summary>/// <param name="root"></param>/// <param name="subKey"></param>/// <param name="valueName"></param>/// <param name="value"></param>/// <exception cref="Exception"></exception>public void SetValue(RegistryRoot root, string subKey, string valueName, string value){IntPtr hKey = GetRegistryRootKey(root);int result = RegOpenKeyEx(hKey, subKey, 0, KEY_WRITE, out IntPtr phkResult);if (result != ERROR_SUCCESS){throw new Exception("打开注册表key失败。Failed to open registry key.");}byte[] data = Encoding.Unicode.GetBytes(value);result = RegSetValueEx(phkResult, valueName, 0, REG_SZ, data, data.Length);if (result != ERROR_SUCCESS){throw new Exception("设置注册表值失败。Failed to set registry value.");}RegCloseKey(phkResult);}/// <summary>/// 获取注册表值/// Get registry value/// </summary>/// <param name="root"></param>/// <param name="subKey"></param>/// <param name="valueName"></param>/// <returns></returns>/// <exception cref="Exception"></exception>public string GetValue(RegistryRoot root, string subKey, string valueName){IntPtr hKey = GetRegistryRootKey(root);int result = RegOpenKeyEx(hKey, subKey, 0, KEY_READ, out IntPtr phkResult);if (result != ERROR_SUCCESS){throw new Exception("打开注册表key失败。Failed to open registry key.");}int type = 0;int size = 1024;StringBuilder data = new StringBuilder(size);result = RegGetValue(phkResult, null, valueName, RRF_RT_REG_SZ, out type, data, ref size);if (result != ERROR_SUCCESS){throw new Exception("获取注册表的值失败。Failed to get registry value.");}RegCloseKey(phkResult);return data.ToString();}/// <summary>/// 删除注册表值/// Delete registry value/// </summary>/// <param name="root"></param>/// <param name="subKey"></param>/// <param name="valueName"></param>/// <exception cref="Exception"></exception>public void DeleteValue(RegistryRoot root, string subKey, string valueName){IntPtr hKey = GetRegistryRootKey(root);int result = RegOpenKeyEx(hKey, subKey, 0, KEY_WRITE, out IntPtr phkResult);if (result != ERROR_SUCCESS){throw new Exception("打开注册表key失败。Failed to open registry key.");}result = RegDeleteValue(phkResult, valueName);if (result != ERROR_SUCCESS){throw new Exception("删除注册表的值失败。Failed to delete registry value.");}RegCloseKey(phkResult);}