C#修改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
相关产品推荐
相关产品推荐

