Registre demandé l'accès n'est pas autorisé

j'écris un utilitaire de tweak qui modifie certaines clés sous HKEY_CLASSES_ROOT .

tout fonctionne très bien sous Windows XP et ainsi de suite. Mais je reçois l'erreur Requested registry access is not allowed sous Windows 7. Vista et 2008 je suppose aussi.

comment modifier mon code pour ajouter le support UAC?

38
demandé sur abatishchev 2009-02-18 21:45:03

7 réponses

app.manifest devrait être comme ceci:

<?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
répondu abatishchev 2010-03-31 15:06:29

si vous n'avez pas besoin d'administrateur privé pour l'application entière, ou seulement pour quelques changements peu fréquents, vous pouvez faire les changements dans un nouveau processus et le lancer en utilisant:

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

qui exécutera le processus en tant qu'administrateur pour faire tout ce dont vous avez besoin avec le registre, mais revenir à votre application avec les privilèges normaux. De cette façon, il n'invite pas l'utilisateur avec un dialogue UAC chaque fois qu'il lance.

17
répondu Davy8 2009-02-18 18:59:39

vous ne pouvez pas écrire aux ruches HKCR (ou HKLM) dans Vista et les versions plus récentes de Windows à moins que vous n'ayez des privilèges administratifs. Par conséquent, vous aurez besoin soit d'être connecté en tant qu'administrateur avant d'exécuter votre utilitaire, de lui donner un manifeste qui dit qu'il nécessite le niveau administrateur (ce qui demandera à l'utilisateur de s'identifier), ou d'arrêter de changer des choses dans des endroits que les non-administrateurs ne devraient pas jouer. :- )

16
répondu Ken White 2015-03-27 19:37:54

comme solution temporaire, les utilisateurs peuvent cliquer avec le bouton droit de la souris sur l'utilitaire et sélectionner" Exécuter en tant qu'administrateur."

4
répondu Brian 2009-02-18 18:58:48

j'essayais le verb = "runas" , mais j'obtenais toujours L'Exception D'accès non-autorisé en essayant de mettre à jour la valeur du registre. Il s'est avéré que c'était dû à ne pas ouvrir la sous-clé avec writable set à true.

Registry.OpenSubKey("KeyName", true);

ne peut pas écrire à la clé de Registre, obtenir Unaccessexception non autorisée

2
répondu Despertar 2017-05-23 11:47:09

cette question concerne l'octroi de l'autorisation nécessaire au compte utilisateur sur lequel la demande est lancée. Pour lire une situation similaire et une réponse détaillée pour la bonne solution, comme documenté par Microsoft, n'hésitez pas à visiter ce post: http://rambletech.wordpress.com/2011/10/17/requested-registry-access-is-not-allowed/

1
répondu Ozzie 2011-10-17 08:01:07

vous pourriez faire la même chose que abatishchev, mais sans les 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
répondu Last Resort 2018-09-05 21:06:52