No se permite el acceso al registro solicitado


Estoy escribiendo una utilidad tweak que modifica algunas claves bajo HKEY_CLASSES_ROOT.

Todo funciona bien bajo Windows XP y así sucesivamente. Pero estoy recibiendo error Requested registry access is not allowed bajo Windows 7. Vista y 2008 supongo que también.

¿Cómo debo modificar mi código para agregar soporte UAC?

Author: abatishchev, 2009-02-18

7 answers

app.manifest debe 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>
 52
Author: abatishchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-31 15:06:29

Si no necesita privs de administrador para toda la aplicación, o solo para algunos cambios poco frecuentes, puede hacer los cambios en un nuevo proceso e iniciarlo usando:

Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";

Que ejecutará el proceso como administrador para hacer lo que necesite con el registro, pero volverá a su aplicación con los privilegios normales. De esta manera, no le solicita al usuario un diálogo de UAC cada vez que se inicia.

 17
Author: Davy8,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-18 18:59:39

No puede escribir en las colmenas HKCR (o HKLM) en Vista y versiones más recientes de Windows a menos que tenga privilegios administrativos. Por lo tanto, deberá iniciar sesión como Administrador antes de ejecutar su utilidad, darle un manifiesto que diga que requiere nivel de Administrador (que solicitará al usuario información de inicio de sesión de Administrador), o dejar de cambiar cosas en lugares que no deberían estar jugando los administradores. :-)

 16
Author: Ken White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-27 19:37:54

Como solución temporal, los usuarios pueden hacer clic derecho en la utilidad y seleccionar "Ejecutar como administrador."

 4
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-18 18:58:48

Estaba probando el verb = "runas", pero todavía estaba recibiendo UnauthorizedAccessException al intentar actualizar el valor del registro. Resultó que se debió a no abrir la subclave con writeable establecido en true.

Registry.OpenSubKey("KeyName", true);

No se puede escribir en la clave del Registro, obteniendo UnauthorizedAccessException

 2
Author: Despertar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:09

Este problema tiene que ver con la concesión de 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, no dude en visitar este post: http://rambletech.wordpress.com/2011/10/17/requested-registry-access-is-not-allowed /

 1
Author: Ozzie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-17 08:01:07

Usted Podría Hacer Lo mismo que abatishchev, pero sin la UAC

<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<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">
    </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
 0
Author: Last Resort,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-05 21:06:52