title: Setting Registry key write permissions using .NET
body: <p>I'm trying to grant Write access to my application's registry settings to everyone or all users of a machine during the install process.  </p>
  
  <p>My application does not have the appropriate permissions directly after install without requiring an administrator to grant them even though the keys and values exists, they cannot be updated?  I've the snippet below, but the installer is failing due to Unauthorized access / access denied.  I think I'm on the right track...</p>
  
  <p>How can I resolve the permissions issue without requiring manual attention?  Is there a better approach?  I'm attempting to replace an additional installer with the Visual Studio setup by adding this functionality.</p>
  
  <pre><code>    protected void GrantAllAccessPermission(String key)
      {
          try
          {
              SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
              NTAccount account = sid.Translate(typeof(NTAccount)) as NTAccount;
  
              // Get ACL from Windows, allow writing to the registry key
              using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(key, true))
              {
  
                  RegistrySecurity rs = new RegistrySecurity();
  
                  // Creating registry access rule for 'Everyone' NT account
                  RegistryAccessRule rar = new RegistryAccessRule(
                      account.ToString(),
                      RegistryRights.FullControl,
                      InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                      PropagationFlags.None,
                      AccessControlType.Allow);
  
                  rs.AddAccessRule(rar);
                  rk.SetAccessControl(rs);
              }
  
          }
          catch (System.Security.SecurityException ex)
          {
              throw new InstallException(
                  String.Format("An exception in GrantAllAccessPermission, security exception! {0}", key),  
                  ex);
          }
          catch (UnauthorizedAccessException ex)
          {
              throw new InstallException(
                  String.Format("An exception in GrantAllAccessPermission, access denied! {0}", key),  
                  ex);
          }
  
      }
  </code></pre>