net - acceso denegado al registro solicitado c#
El acceso al registro solicitado no está permitido (6)
Estoy escribiendo una utilidad de modificación que modifica algunas teclas bajo HKEY_CLASSES_ROOT
.
Todo funciona bien en Windows XP, y así sucesivamente. Pero obtengo un error. El Requested registry access is not allowed
en Windows 7. Vista y 2008, supongo.
¿Cómo debo modificar mi código para agregar soporte UAC?
Como solución temporal, los usuarios pueden hacer clic con el botón derecho en la utilidad y seleccionar "Ejecutar como administrador".
Estaba probando el verb = "runas"
, pero aún verb = "runas"
excepción de verb = "runas"
no autorizada cuando intentaba actualizar el valor del registro. Resultó que no se debía abrir la subclave con el conjunto de escritura en verdadero.
Registry.OpenSubKey("KeyName", true);
No se puede escribir en la clave del registro, obteniendo una Access Access no autorizada
Este problema tiene que ver con otorgar la autorización necesaria a la cuenta de usuario en la que se ejecuta la aplicación. Para leer una situación similar y una respuesta detallada para la solución correcta, según lo documentado por Microsoft, siéntase libre de visitar esta publicación: http://rambletech.wordpress.com/2011/10/17/requested-registry-access-is-not-allowed/
No puede escribir en las colmenas HKCR (o HKLM) en Vista y las versiones más nuevas de Windows a menos que tenga privilegios administrativos. Por lo tanto, deberá iniciar sesión como administrador antes de ejecutar su utilidad, proporcionarle un manifiesto que indique que requiere el nivel de administrador (lo que solicitará al usuario la información de inicio de sesión del administrador) o dejar de cambiar las cosas en lugares que no -Los administradores no deberían estar jugando. :-)
Si no necesita los privilegios de administrador para toda la aplicación, o solo para unos pocos cambios poco frecuentes, puede hacer los cambios en un nuevo proceso y ejecutarlo usando:
Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";
que ejecutará el proceso como administrador para hacer lo que necesite con el registro, pero regrese a su aplicación con los privilegios normales. De esta forma, no solicita al usuario un diálogo de UAC cada vez que se inicia.
app.manifest
debería ser así:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>