Bonsoir,
Dans une application j'ai besoin de connaître le répertoire d'installation d'un programme (Firebird serveur dans cet exemple). Pour cela j'utilise le code suivant :
Compilé avec Lazarus Win32, pas de problème sous XP 32b, mais sous W7 64b, OpenKeyReadOnly retourne False.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 with TRegistry.Create do try RootKey:=HKEY_LOCAL_MACHINE; if OpenKeyReadOnly('SOFTWARE\Firebird Project\Firebird Server\Instances') then begin etc...
Compilé avec Lazarus Win64, ce code fonctionne bien sous W7 64b.
La lecture de HKCU au lieu de HKLM ne pose pas ce problème.
N'y a-t-il pas d'autre solution que de faire une version 64b de l'application pour fonctionner sous Win64 et une autre version 32b pour fonctionner sous Win32?
André
PS si çà peut faire avancer le schmilblick.
Je me suis aperçu que OpenKeyReadOnly renvoie bien True quand la clef dans HK_LOCAL_MACHINE\SOFTWARE\ est celle d'une application 32b. Mais celles-ci sont relativement rares car quand on consulte la BDR avec Regedit, ces appli 32b figurent généralement dans HK_LOCAL_MACHINE\SOFTWARE\Wow6432Node\. Et encore plus curieusement elles répondent "présent" quand on les cherche dans HK_LOCAL_MACHINE\SOFTWARE\. Arrr... Windows et ses redirections...
Mais tout çà ne résout pas le problème, par ce moyen on ne peut pas trouver à partir d'une application 32b, le chemin d'une application 64b installée et la lancer. Pourtant en donnant le chemin "en dur" un TProcess dans une appli 32b exécute apparemment correctement l'appli 64b.
Partager