第一个方法用来给注册表添加一个禁止修改键值的权限;第二个方法用来删除刚刚添加的禁止修改键值权限。
现在第一个方法可以正常运行,但是第二个方法运行就提示“不允许所请求的注册表访问权”,很是郁闷,还请前辈帮忙给看下是怎么回事,感谢!
        private void button1_Click(object sender, EventArgs e)
        {
            
            NTAccount name = new NTAccount(Environment.UserName);
            RegistrySecurity rs = Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test").GetAccessControl();
            rs.AddAccessRule(new RegistryAccessRule(name, RegistryRights.SetValue, AccessControlType.Deny));
            Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test", true).SetAccessControl(rs);
            
        }        private void button2_Click(object sender, EventArgs e)
        {
           
            NTAccount name = new NTAccount(Environment.UserName);
            RegistrySecurity rs = Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test").GetAccessControl();
            rs.RemoveAccessRule(new RegistryAccessRule(name, RegistryRights.SetValue, AccessControlType.Deny));
            Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test", true).SetAccessControl(rs);
        }

解决方案 »

  1.   

    最后一次OpenSubKey("test", true)的时候,true表示可写,但是你先前已经拒绝SetValue,因此OpenSubKey就出错了。
    把OpenSubKey改成另一个重载,并指定RegistryRights.ChangePermissions:{
        NTAccount name = new NTAccount(Environment.UserDomainName, Environment.UserName);
        using (RegistryKey regKey = Registry.LocalMachine.OpenSubKey("software\\test", RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions))
        {
            RegistrySecurity rs =regKey.GetAccessControl();
            RegistryAccessRule denyRule = rs
                .GetAccessRules(true, false, typeof(NTAccount))
                .OfType<RegistryAccessRule>()
                .FirstOrDefault(r => r.AccessControlType == AccessControlType.Deny && (r.IdentityReference as NTAccount) == name);        if (denyRule != null && rs.RemoveAccessRule(denyRule))
            {
                regKey.SetAccessControl(rs);
            }
        }
    }
      

  2.   

    gomoku非常感谢啊!
    弱弱的问下,能不能加你的QQ啊?
    以后如果碰到问题的话可以跟你请教下。