C#通过Microsoft.Win32.Registry类操作Windows注册表,支持五大根键(如CurrentUser、LocalMachine),常用OpenSubKey/GetValue读取、CreateSubKey/SetValue写入,需注意权限、路径存在性及值类型指定。
在C#中读写Windows注册表,主要通过 Microsoft.Win32.Registry 类及其子类(如 RegistryKey)完成。它封装了对注册表HKEY根键的访问,支持本地和远程注册表操作(需权限),但默认仅限本机。
Windows注册表有五大预定义根键,C#中用静态属性表示:
使用 OpenSubKey() 获取子键,再用 GetValue() 读取具体值。注意:路径不区分大小写,但必须存在,否则返回 null 或抛异常。
// 示例:读取当前用户的桌面背景路径
using Microsoft.Win32;
var key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop");
if (key != null)
{
object value = key.GetValue("Wallpaper"); // 返回 object,需自行转换
string wallpaperPath = value?.ToString() ?? "";
key.Close();
}
✅ 小提示:建议用 GetValue(name, defaultValue) 避免空值判断;读取前检查键是否存在,或用 try/catch 处理访问拒绝(如无权限读 HKLM)。
写入需确保目标键可写(如 HKCU 默认可写,HKLM 通常需管理员权限)。使用 CreateSubKey() 创建或打开键,再调用 SetValue()。
// 示例:在当前用户下保存程序版本
var key = Registry.CurrentUser.CreateSubKey(@"Software\MyApp");
if (key != null)
{
key.SetValue("Version", "2.1.0", RegistryValueKind.String);
key.SetValue("InstallTime", DateTime.Now.ToString(), RegistryValueKind.String);
key.Close();
}
RegistryValueKind 可指定值类型(String、DWord、QWord、Binary、MultiString等),不指定则自动推断(但推荐显式声明)UnauthorizedAccessException
DeleteSubKey() 或 DeleteSubKeyTree()(含子项)注册表操作受UAC和权限策略严格限制:
SOFTWARE\Vendor\App)
基本上就这些。掌握 OpenSubKey / CreateSubKey + GetValue / SetValue 这四步,就能覆盖绝大多数注册表操作场景。