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

来源:这里教程网 时间:2026-02-21 17:37:10 作者:

在 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(@"Software\MyApp")?.GetValue("InstallPath", "");

写入注册表值(CreateSubKey + SetValue)

写入分两步:确保子键存在(

CreateSubKey
自动创建路径),再设值:

CreateSubKey("Path\To\Key", writable: true)
返回可写 key;若仅读,用
OpenSubKey("...", false)
SetValue("Name", value, RegistryValueKind)
显式指定类型更稳妥(如
String
DWord
QWord
Binary
不指定类型时,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 更稳妥。

相关推荐