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

C#修改HKLM注册表值遇UnauthorizedAccess错误求助

解决HKLM注册表项修改时的UnauthorizedAccess错误

你的问题核心在于打开注册表项时默认使用了只读权限——即便以管理员身份运行,Registry.LocalMachine.OpenSubKey()方法默认仍以只读模式打开项,导致无法执行SetValue写入操作。

代码修正方案

调用OpenSubKey时,需传入第二个参数显式指定可写权限,同时用using语句自动释放注册表资源:

using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\SecureBoot\State", true))
{
    if (key != null)
    {
        int value = (int)key.GetValue("UEFISecureBootEnabled");

        if (value == 0)
        {
            // 显式指定值类型为DWord,避免潜在类型匹配问题
            key.SetValue("UEFISecureBootEnabled", 1, RegistryValueKind.DWord);
        }
    }
}

额外注意事项

  • SecureBoot系统保护:UEFISecureBootEnabled属于SecureBoot相关的敏感系统项,若设备已开启SecureBoot,Windows会通过系统级保护机制锁定该值,即便管理员权限也无法修改。
  • 权限验证:可在代码中提前确认当前进程是否拥有管理员权限:
    var identity = WindowsIdentity.GetCurrent();
    var principal = new WindowsPrincipal(identity);
    bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:25:24