

新闻资讯
技术学院C#通过Microsoft.Win32.Registry类操作注册表,支持五大根键读写;推荐优先使用CurrentUser(无需管理员权限),LocalMachine写入需管理员权限;读取用GetValue/GetXXX方法,写入用CreateSubKey+SetValue,删除用DeleteValue/DeleteSubKeyTree,注意权限、空值判断与资源释放。
在 C# 中操作 Windows 注册表,主要通过 Microsoft.Win32.Registry 类及其子类(如 RegistryKey)完成。它提供了对注册表五大根键(HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE 等)的安全读写能力,无需 P/Invoke。
注册表根键是静态属性,直接调用即可获取顶层 RegistryKey 实例:
Registry.ClassesRoot —— 对应 HKEY_CLASSES_ROOT,常用于文件关联、COM 注册Registry.CurrentUser —— 对应 HKEY_CURRENT_USER,当前用户配置,**推荐优先使用,无需管理员权限**Registry.LocalMachine —— 对应 HKEY_LOCAL_MACHINE,本机全局设置,**写入需管理员权限**Registry.Users —— 对应 HKEY_USERS,所有用户配置(含 .DEFAULT 和 SID 键)Registry.CurrentConfig —— 对应 HKEY_CURRENT_CONFIG,硬件配置快照先用 OpenSubKey() 打开子键(可指定只读或读写),再用 GetValue() 或类型化方法读值:
key.GetValue("ValueName") 返回 object,需自行转换类型key.GetValueKind("ValueName") 获取值类型(如 RegistryValueKind.String)GetValue("Name", defaultValue) 避免 null 异常写入分两步:确保子键存在(CreateSubKey 自动创建路径),再设值:
CreateSubKey("Path\To\Key", writable: true) 返回可写 key;若仅读,用 OpenSubKey("...", false)
SetValue("Name", value, RegistryValueKind) 显式指定类型更稳妥(如 String、DWord、QWord、Binary)DWord,string → String,byte[] → Binary
HKEY_LOCAL_MACHINE 写入前,必须以管理员身份运行程序,否则抛出 UnauthorizedAccessException
删除需谨慎,建议先判断存在性:
key.DeleteValue("ValueName", throwOnMissing: false) —— 删除单个值,不抛异常key.DeleteSubKey("SubKeyName", throwOnMissing: false) —— 删除空子键key.DeleteSubKeyTree("SubKeyPath") —— 递归删除整个子树(含所有子键和值)key.Close() 或用 using 语句释放资源基本上就这些。核心就是:选对根键、打开/创建子键、读写值、及时关闭。权限和路径有效性是常见坑点,开发时多加 null 判断和 try-catch 更稳妥。