Estoy intentando otorgar acceso de escritura a la configuración de registro de mi aplicación a todos o todos los usuarios de una máquina durante el proceso de instalación.Configuración de los permisos de escritura de la clave del Registro mediante .NET
Mi aplicación no cuenta con los permisos apropiados directamente después de la instalación sin requerir que un administrador los otorgue aunque las claves y valores existen, no se pueden actualizar? Tengo el siguiente fragmento, pero el instalador está fallando debido a acceso/acceso no autorizado denegado. Creo que estoy en el camino correcto ...
¿Cómo puedo resolver el problema de permisos sin requerir atención manual? ¿Hay un mejor enfoque? Estoy intentando reemplazar un instalador adicional con la configuración de Visual Studio agregando esta funcionalidad.
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);
}
}
utilicé el fragmento de lograr algo similar ... sólo para hacerle saber , 'Registry.LocalMachine.OpenSubKey (clave)' debe ser 'Registry.LocalMachine.OpenSubKey (clave, verdadero)' (donde 'true' indica que la clave será escribible). Me estaba encontrando con 'UnuthorizedAccessExceptions' sin ese cambio. ¡Gracias! – Pwninstein
¡Gracias por eso, Pwninstein! ¡Me salvó innumerables horas de frustración! –