You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VB/C#操作注册表添加值、获取权限及访问其他用户注册表问题

Windows注册表VB/C#操作问题解决方案

问题1:向指定注册表键添加键值项的实现方法

添加键值项不需要使用CreateSubKey方法,该方法仅用于创建子键,新增/修改键值项使用SetValue方法即可,操作步骤如下:

  1. 首先从对应注册表基项(如Registry.Users、Registry.LocalMachine等)以可写权限打开目标子键
  2. 调用子键实例的SetValue方法写入键值,如对应键值不存在则自动新增,存在则覆盖原有值
  3. 操作完成后释放注册表键资源(推荐用using语句自动释放)

C# 示例代码

using Microsoft.Win32;

// 第二个参数为true表示获取可写权限
using (RegistryKey targetKey = Registry.Users.OpenSubKey(@".DEFAULT\Control Panel\International", true))
{
    if (targetKey != null)
    {
        // 写入字符串类型键值
        targetKey.SetValue("CustomString", "测试值", RegistryValueKind.String);
        // 写入DWORD类型键值
        targetKey.SetValue("CustomDword", 1001, RegistryValueKind.DWord);
    }
}

VB 示例代码

Imports Microsoft.Win32

' 第二个参数为True表示获取可写权限
Using targetKey As RegistryKey = Registry.Users.OpenSubKey(".DEFAULT\Control Panel\International", True)
    If targetKey IsNot Nothing Then
        ' 写入字符串类型键值
        targetKey.SetValue("CustomString", "测试值", RegistryValueKind.String)
        ' 写入DWORD类型键值
        targetKey.SetValue("CustomDword", 1001, RegistryValueKind.DWord)
    End If
End Using

问题2:访问HKEY_USERS下其他用户注册表项的解决方法

报错的核心原因是默认进程权限不足,且未加载/获取其他用户注册表的操作权限,无需手动以管理员身份登录系统,按以下步骤操作即可:

  • 首先配置程序自动提权:在项目的app.manifest配置文件中,修改requestedExecutionLevel节点为如下内容,程序运行时会自动触发UAC提权:
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    
  • 再根据目标用户的状态选择对应操作:
    • 若目标用户未登录:其他用户的注册表默认存储在对应用户目录的NTUSER.DAT文件中,需要调用Win32 API RegLoadKey将该文件加载到HKEY_USERS的自定义子节点下,操作完成后必须调用RegUnLoadKey卸载配置单元,避免影响用户后续登录。
    • 若目标用户已登录:对应用户的注册表已加载在HKEY_USERS下以用户SID命名的子节点中,只需先修改目标注册表项的访问控制列表(ACL),给当前管理员账号添加完全控制权限,即可正常执行写入操作。

权限修改C#示例(适用于已登录用户)

using System.Security.AccessControl;
using System.Security.Principal;
using Microsoft.Win32;

// 替换为目标用户的实际SID
string targetUserSid = "S-1-5-21-123456789-1234567890-1234567890-1001";
using (RegistryKey userRootKey = Registry.Users.OpenSubKey(
    targetUserSid, 
    RegistryKeyPermissionCheck.ReadWriteSubTree, 
    RegistryRights.ChangePermissions | RegistryRights.WriteKey))
{
    if (userRootKey != null)
    {
        // 给当前管理员账号添加完全控制权限
        RegistrySecurity acl = userRootKey.GetAccessControl();
        SecurityIdentifier currentAdmin = WindowsIdentity.GetCurrent().Owner;
        RegistryAccessRule accessRule = new RegistryAccessRule(
            currentAdmin, 
            RegistryRights.FullControl, 
            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
            PropagationFlags.None, 
            AccessControlType.Allow);
        acl.AddAccessRule(accessRule);
        userRootKey.SetAccessControl(acl);
        
        // 权限修改完成后即可正常创建子键、写入键值
        userRootKey.CreateSubKey(@"Test\MySubKey");
    }
}

内容的提问来源于stack exchange,提问作者MHD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:45:04