C#修改注册表权限

最后一次OpenSubKey("test", true)的时候,true表示可写,但是你先前已经拒绝SetValue,因此OpenSubKey就出错了。
把OpenSubKey改成另一个重载,并指定RegistryRights.ChangePermissions:

C# code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
    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(truefalsetypeof(NTAccount))
            .OfType<RegistryAccessRule>()
            .FirstOrDefault(r => r.AccessControlType == AccessControlType.Deny && (r.IdentityReference as NTAccount) == name);
 
        if (denyRule != null && rs.RemoveAccessRule(denyRule))
        {
            regKey.SetAccessControl(rs);
        }
    }
}
posted @ 2013-05-24 11:21  cyes  阅读(511)  评论(0)    收藏  举报