2010-06-18 4 views
1

Je ne peux pas lire à partir du Registre sauf si j'exécute mon application en mode administrateur. Je construis un gestionnaire d'aperçu, en utilisant l'interface IPreviewHandler, et j'ai besoin de GUID pour les types de fichiers situés dans HKEY_CLASSES_ROOT.Impossible de lire à partir du registre - HKEY_CLASSES_ROOT s'il n'est pas en cours d'exécution en mode Administrateur

Comment puis-je accéder à ces informations sans élever mon application à l'administrateur. J'utilise Delphi mais heureux pour tout exemple de code.

Merci, Phillip

+0

Pouvez-vous publier le code que vous utilisez pour accéder au registre? –

Répondre

8

Lorsque vous créez un objet TRegistry, par défaut ALL_ACCESS est demandée.

Si vous ne devez lire les valeurs, utilisez

reg := TRegistry.Create(KEY_QUERY_VALUE); 
6

Pour ajouter à réponse globs, vous pouvez également utiliser la méthode TRegistry.OpenKeyReadOnly();.

1

Je recommande d'utiliser à la place KEY_READ constante de KEY_QUERY_VALUE:

reg: = TRegistry.Create (KEY_READ);

ou:

reg: = TRegistry.Create;
reg.Access: = KEY_READ;

+0

Pourquoi? KEY_QUERY_VALUE semble être exactement ce dont on a besoin ici. Le PO veut demander la valeur d'une clé de registre et pas plus. –

+0

Parce que KEY_READ est plus commun et générique. Et le message de OP n'est pas clair sur ce qu'il fait –

1

Microsoft a décidé de ne plus vouloir que les programmeurs déconnaient HKEY_CLASSES_ROOT. Ils ont donc dû utiliser l'accès en mode administrateur pour y accéder sous Windows 7 (et je crois que Vista aussi).

, ils veulent au lieu que vous regardez dans HKEY_CURRENT_USER, qui doit contenir les mêmes GUIDs dont vous avez besoin, mais pour l'utilisateur spécifique actuellement connecté.

Voir si les GUIDs dont vous avez besoin sont HKEY_CURRENT_USER. Si oui, accédez à ceux-ci et vous n'aurez pas besoin du mode administrateur pour lire ou écrire.