48 votes

L'accès au registre demandé n'est pas autorisé

Je suis en train d'écrire un utilitaire qui modifie certaines clés sous le nom de HKEY_CLASSES_ROOT .

Tout fonctionne 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 aussi, je suppose.

Comment dois-je modifier mon code pour ajouter le support UAC ?

61voto

abatishchev Points 42425

app.manifest devrait être comme ça :

<?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>

4 votes

@Gunner : Mettez-le dans la racine d'un projet, comme App.config. (File -> Add New Item -> Application Manifest File)

0 votes

@abatishchev : Le contenu xml ci-dessus est générique et devrait suffire pour toute application, non ?

0 votes

@Gunner : Vous devez probablement mettre à jour la version et le nom de l'application. Tout le reste doit être laissé tel quel

19voto

Davy8 Points 12458

Si vous n'avez pas besoin de privilèges d'administrateur pour l'ensemble de l'application, ou seulement pour quelques changements peu fréquents, vous pouvez effectuer les changements dans un nouveau processus et le lancer en utilisant :

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

qui lancera le processus en tant qu'administrateur pour faire ce dont vous avez besoin avec le registre, mais retournera à votre application avec les privilèges normaux. De cette façon, l'utilisateur n'est pas invité à ouvrir une boîte de dialogue UAC à chaque lancement.

0 votes

Voulez-vous dire qu'il faut implémenter un fork, où une partie du code lance la même application avec un paramètre pour qu'une autre partie du code soit exécutée ?

0 votes

Il peut s'agir de la même application avec des paramètres ou d'une petite application distincte sans fenêtre qui écrit ce dont elle a besoin.

19voto

Ken White Points 73213

Dans Vista et les versions plus récentes de Windows, vous ne pouvez pas écrire dans les répertoires de stockage HKCR (ou HKLM) si vous ne disposez pas de privilèges d'administrateur. Par conséquent, vous devrez soit être connecté en tant qu'administrateur avant d'exécuter votre utilitaire, soit lui donner un manifeste indiquant qu'il nécessite le niveau administrateur (ce qui demandera à l'utilisateur des informations de connexion administrateur), soit cesser de modifier les choses à des endroits où les non-administrateurs ne devraient pas jouer :-)

2 votes

Vous êtes les bienvenus. :-) Désolé de ne pas avoir pu poster le bon manifeste, mais je n'en avais pas sur cette machine et je me suis dit que si quelqu'un devait en chercher un, autant que ce soit vous. <g>

6voto

Brian Points 14040

Comme solution temporaire, les utilisateurs peuvent faire un clic droit sur l'utilitaire et sélectionner "Exécuter en tant qu'administrateur".

2voto

Despertar Points 5365

J'essayais le verb = "runas" mais j'ai quand même eu une exception UnauthorizedAccessException lorsque j'ai essayé de mettre à jour la valeur du registre. Il s'est avéré que c'était dû au fait que la sous-clé n'avait pas été ouverte avec writeable sur true.

Registry.OpenSubKey("KeyName", true);

Impossible d'écrire sur la clé de registre, obtention de UnauthorizedAccessException

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X