C#怎么操作注册表 C# Registry类读写注册表方法

3次阅读

C# 通过 Microsoft.Win32.Registry 类操作注册表,支持五大根键读写;推荐优先使用 CurrentUser(无需管理员权限),LocalMachine 写入需管理员权限;读取用 GetValue/GetXXX 方法,写入用 CreateSubKey+SetValue,删除用 DeleteValue/DeleteSubKeyTree,注意权限、空值判断与资源释放。

C# 怎么操作注册表 C# Registry 类读写注册表方法

在 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,硬件配置快照

读取注册表值(GetXXX 方法)

先用 OpenSubKey() 打开子键(可指定只读或读写),再用 GetValue() 或类型化方法读值:

  • key.GetValue("ValueName") 返回 object,需自行转换类型
  • key.GetValueKind("ValueName") 获取值类型(如 RegistryValueKind.String
  • 安全读取建议用 GetValue("Name", defaultValue) 避免 null 异常
  • 示例:string path = (string)CurrentUser.OpenSubKey(@”SoftwareMyApp”)?.GetValue(“InstallPath”, “”);

写入注册表值(CreateSubKey + SetValue)

写入分两步:确保子键存在(CreateSubKey 自动创建路径),再设值:

  • CreateSubKey("PathToKey", writable: true) 返回可写 key;若仅读,用 OpenSubKey("……", false)
  • SetValue("Name", value, RegistryValueKind) 显式指定类型更稳妥(如 StringDWordQWordBinary
  • 不指定类型时,C# 会自动映射:int → DWord,string → String,byte[] → Binary
  • 注意:向 HKEY_LOCAL_MACHINE 写入前,必须以管理员身份运行程序,否则抛出 UnauthorizedAccessException

删除键和值(DeleteSubKey / DeleteValue)

删除需谨慎,建议先判断存在性:

  • key.DeleteValue("ValueName", throwOnMissing: false) —— 删除单个值,不抛异常
  • key.DeleteSubKey("SubKeyName", throwOnMissing: false) —— 删除空子键
  • key.DeleteSubKeyTree("SubKeyPath") —— 递归删除整个子树(含所有子键和值)
  • 删除后记得调用 key.Close() 或用 using 语句释放资源

基本上就这些。核心就是:选对根键、打开 / 创建子键、读写值、及时关闭。权限和路径有效性是常见坑点,开发时多加 null 判断和 try-catch 更稳妥。

星耀云
版权声明:本站原创文章,由 星耀云 2026-01-07发表,共计1639字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources