C#Registry SetValue抛出UnauthorizedAccessException

Mid*_*das 8 c# registry registrykey unauthorizedaccessexcepti

在您尝试使用"快速Google搜索"进行回答之前.我想指出我已经.这是情况,我有以下方法尝试修改注册表项值.我得到的问题是,当执行时,它会抛出一个UnauthorizedAccessException,即使我已经将密钥打开为可写.我以管理员身份运行Visual Studio,甚至尝试使用清单文件创建一个小的.exe,强制它以管理员身份运行,执行代码时没有运气.密钥已经存在,它不会尝试进入CreateKey方法.这是代码块.

Path = "S-1-5-21-1644491937-1078145449-682003330-5490\Software\Microsoft\Windows\CurrentVersion\Policies\System"
Key = "DisableTaskMgr"
NewValue = 1

public OperationResult ModifyKey()
    {
        OperationResult result = new OperationResult();

        if (!Path.IsNullOrEmptyTrim())
        {
            if (!Key.IsNullOrEmptyTrim())
            {
                try
                {
                    var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, true);

                    if (key != null)
                    {
                        key.SetValue(Key, NewValue);

                        key.Close();
                    }
                    else
                    {
                        result = CreateKey();
                    }
                }
                catch (Exception ex)
                {
                    result.SetFail("Error accessing registry", ex);
                }
            }
            else
            {
                result.SetFail("Registry key was null");
            }
        }
        else
        {
            result.SetFail("Registry path was null");
        }

        return result;
    }
Run Code Online (Sandbox Code Playgroud)

我是否必须手动遍历注册表树,将每个OpenSubKey调用设置为可写?我也尝试了这个,仍然犯了同样的错误......

小智 14

在你的密钥的var中

var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, true);
Run Code Online (Sandbox Code Playgroud)

改成

var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, RegistryKeyPermissionCheck.ReadWriteSubTree);  
Run Code Online (Sandbox Code Playgroud)


Mid*_*das 3

作为弄清楚发生了什么的最后努力,我创建了一个简单的服务来测试将作为本地系统帐户运行的代码。这是我能想到的尝试运行代码的最高权限。使用这些权限运行代码是有效的。

特别感谢0_ _ ___0Charleh也指出了防病毒软件。我检查了日志,发现它正在尝试隔离我的更改。我想即使它也不会阻止系统用户进行这些更改。

还要特别感谢Sorceri帮助我进行了如此多的研究。

总之,如果您出现间歇性的、极其奇怪的行为,请检查您的病毒扫描程序和权限。