Administrateur ou pas, il faut que ton programme demande une élévation de privilège pour pouvoir écrire dans HKEY_CLASSES_ROOT.
Pour être certain que c'est cela : compile ton programme ; fait un clic droit sur le .EXE et dans le menu choisi "Exécuter en tant qu'administrateur".
Pour que ton programme demande une élévation de privilège automatiquement, il faut inclure à l'EXE une ressource du type :
fichier MonProgramme.RC
1 24 "MonProgramme.manifest"
Fichier MonProgramme.manisfest doit être qq chose du type :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="5.1.2.0"
processorArchitecture="*"
name="MonProgramme"
type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly> |
Tu compile le .RC en .RES et inclu le .RES à ton projet à l'aide de {$R ..... }
Si ta manipulation de HKEY_CLASSES_ROOT est ponctuelle, il vaut mieux la déplacer dans un EXE à part, car sinon, sous Vista, l'élévation de privilège (avec son écran grisé) va être demandé à chaque lancement de ton programme.
Attention, si on tente de manipuler HKEY_CLASSES_ROOT sans élévation, pour assurer une compatibilité ascendente, les opérations vont être redirigé vers KEY_CURRENT_USER\...\Roaming\.... (je ne sais plus le chemin exact).
Du coup on se retrouve 2 fois avec la même clé, et en mode read-only, élevé ou pas, on ne sais plus trop quelle clé est utilisé par son programme.
Donc quand on ouvre HKEY_CLASSES_ROOT en read-write, il faut à tout prix demander l'élévation de privilège pour éviter ce phénomène de roaming.
En mode read-only/non élevé, le programme regarde d'abord dans HKEY_CLASSES_ROOT et en cas d'absence de la clé regarde dans le Roaming de HKEY_CURRENT_USER.
Cordialement
Partager