C#如何操作注册表 C# Registry类读写Windows注册表项

幻夢星雲
发布: 2025-11-20 19:03:16
原创
841人浏览过
答案:C#通过Microsoft.Win32.Registry和RegistryKey类操作注册表,支持读写删注册表项与值,常用根键包括CurrentUser、LocalMachine等;读取使用OpenSubKey+GetValue,写入使用CreateSubKey+SetValue并可指定RegistryValueKind类型,删除支持DeleteValue和DeleteSubKeyTree;操作需注意权限控制,修改LocalMachine需管理员权限,建议使用try-catch处理UnauthorizedAccessException等异常,防止因权限不足或项不存在导致程序崩溃。

c#如何操作注册表 c# registry类读写windows注册表项

在C#中操作Windows注册表主要通过.NET Framework提供的 Microsoft.Win32.RegistryMicrosoft.Win32.RegistryKey 类来实现。这些类位于 mscorlib.dll 中,无需额外引用,可以直接使用。通过它们可以读取、写入、创建和删除注册表项与值。

1. 常用的注册表根键

C#中定义了几个常用的注册表根键,对应注册表编辑器中的顶级节点:
  • Registry.CurrentUser - 对应 HKEY_CURRENT_USER
  • Registry.LocalMachine - 对应 HKEY_LOCAL_MACHINE
  • Registry.ClassesRoot - 对应 HKEY_CLASSES_ROOT
  • Registry.Users - 对应 HKEY_USERS
  • Registry.CurrentConfig - 对应 HKEY_CURRENT_CONFIG

2. 读取注册表项值

使用 RegistryKey.OpenSubKey() 打开一个子键,然后调用 GetValue() 方法读取指定名称的值。

// 示例:读取当前用户下的某个软件设置
using Microsoft.Win32;
<p>// 打开注册表路径(只读)
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\MyApp"))
{
if (key != null)
{
object value = key.GetValue("SettingName");
if (value != null)
{
Console.WriteLine("读取到值: " + value.ToString());
}
else
{
Console.WriteLine("值不存在");
}
}
else
{
Console.WriteLine("注册表项不存在");
}
}
登录后复制

3. 写入注册表项值

使用 RegistryKey.CreateSubKey() 创建或打开一个子键,再使用 SetValue() 写入数据。

// 示例:向本地机器写入应用程序配置
using Microsoft.Win32;
<p>// 创建或打开注册表项(需要管理员权限修改 LocalMachine)
using (RegistryKey key = Registry.LocalMachine.CreateSubKey(@"Software\MyApp"))
{
if (key != null)
{
key.SetValue("SettingName", "Hello Registry");
key.SetValue("Version", 1.0);
key.SetValue("Count", 100, RegistryValueKind.DWord); // 指定值类型
Console.WriteLine("写入成功");
}
}
登录后复制
注意:修改 Registry.LocalMachine 通常需要管理员权限,否则会抛出安全异常。

4. 删除注册表项或值

可以删除整个子键或仅删除某个值。

// 删除某个值
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\MyApp", true)) // true 表示可写
{
    if (key != null)
    {
        key.DeleteValue("SettingName", false); // false 表示值不存在也不报错
    }
}
<p>// 删除整个子键(递归删除)
Registry.CurrentUser.DeleteSubKeyTree(@"Software\MyApp", false);
登录后复制

5. 注册表值类型说明

SetValue() 方法支持多种注册表数据类型,可通过 RegistryValueKind 枚举指定:

Motiff
Motiff

Motiff是由猿辅导旗下的一款界面设计工具,定位为“AI时代设计工具”

Motiff 148
查看详情 Motiff
  • String - REG_SZ,字符串
  • DWord - REG_DWORD,32位整数
  • QWord - REG_QWORD,64位整数
  • MultiString - REG_MULTI_SZ,字符串数组
  • Binary - REG_BINARY,字节数组
  • ExpandString - REG_EXPAND_SZ,包含环境变量的字符串

// 示例:写入二进制数据

byte[] data = { 0x01, 0x02, 0x03 };
key.SetValue("BinaryData", data, RegistryValueKind.Binary);
登录后复制

6. 权限与异常处理建议

操作注册表可能因权限不足导致失败,建议使用 try-catch 并以管理员身份运行程序。

try
{
    using (RegistryKey key = Registry.LocalMachine.CreateSubKey(@"Software\MyApp"))
    {
        key?.SetValue("Test", "TestValue");
    }
}
catch (UnauthorizedAccessException)
{
    Console.WriteLine("权限不足,无法写入注册表");
}
catch (Exception ex)
{
    Console.WriteLine("其他错误:" + ex.Message);
}
登录后复制

基本上就这些。掌握 Registry 类的基本用法后,就能在C#程序中灵活读写Windows注册表,用于保存配置、开机启动等功能。注意合理使用权限,避免误删系统关键项。

以上就是C#如何操作注册表 C# Registry类读写Windows注册表项的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号