Page 1 sur 1

[..] Utilisation sur OS64bits

Posté : ven. 23 nov. 2012 11:31
par EricF
Bonjour,
J'ai récemment acheté un portable sous 7 64bits, et je rencontre un souci similaire à http://www.autoitscript.fr/forum/viewto ... =3&t=10607 .
Je teste un petit script qui fonctionne sur xp 32.

Code : Tout sélectionner

$reg = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\COWON\Jet-Audio\", "InstallPath_Main")
$length = StringLen($reg)
MsgBox(0, "", "Données lues : " & $reg & " - longueur : " & $length)
 
Si j'exécute le .au3 sur x64, j'obtiens une chaîne vide, alors que si je lance la compilation faite sous XP, j'obtiens bien la valeur de RegRead.
Si je compile sur 7 : en 32bits, idem, en 64bits, je n'obtiens rien.

Si j'adapte mon script avec le code suivant :

Code : Tout sélectionner

$reg = RegRead("HKLM\SOFTWARE\COWON\Jet-Audio\", "InstallPath_Main")
$length = StringLen($reg)
MsgBox(0, "32bits", "Données lues : " & $reg & " - longueur : " & $length)

$reg = RegRead("HKLM64\SOFTWARE\COWON\Jet-Audio\", "InstallPath_Main")
$length = StringLen($reg)
MsgBox(0, "64bits", "Données lues : " & $reg & " - longueur : " & $length)
 
En compilant en x32 sous 7, même souci qu'avant. Si je compile en x64, je n'obtiens aucune valeur dans les deux cas :?

AutoIt installé en appli 64bits sous 7 (mais placé sous Program Files (x86) par l'install !), Win 7 x64 Familiale Premium

Re: Utilisation sur OS64bits

Posté : ven. 23 nov. 2012 11:41
par sylvanie
les balises de titre svp
Merci.

Re: [..] Utilisation sur OS64bits

Posté : ven. 23 nov. 2012 12:28
par sylvanie
Ok, là le modo il est content :mrgreen:

Concernant le phrase suivante :
alors que si je lance la compilation faite sous XP, j'obtiens bien la valeur de RegRead.
on est bien dans le cas où vous avez compilé le script sous XP, et vous l'exécutez sous Win7 ?

Sinon, dans les méthodes d'investigation, reprenez votre code de debug en faisant afficher les @error pour en savoir un peu plus :
► Afficher le texte
et reportez vous à l'aide pour la signification

Re: [..] Utilisation sur OS64bits

Posté : ven. 23 nov. 2012 12:43
par EricF
En gros, quand je compile en 32bits, j'obtiens une valeur, mais rien quand je compile en 64. Et dans les 2 cas, rien avec le HKLM64.

Le @error renvoie 0.... Je précise que je suis sur un compte avec droits d'admin, UAC désactivé. En exécutant avec les droits d'admin, ça ne change rien.

Si je récupère la clé HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\COWON\Jet-Audio\ au lieu de HKLM64\SOFTWARE\Wow6432Node\COWON\Jet-Audio\, ça marche. Pourtant, l'aide indique bien d'utiliser HKLM64 sur les OS 64bits.

Re: [..] Utilisation sur OS64bits

Posté : ven. 23 nov. 2012 12:52
par sylvanie
humm l'aide ne dit pas tout à fait ça :
Elle dit qu'il faut utiliser le suffix 64 pour obtenir des clés spécifiques aux environnements 64 bits, pas toutes les clés ...
Du coup dans votre cas HKLM64 ne s'applique peut être pas à cette clé qui doit être en 32 bits, mais là j'admet que ça deviens tordu ...

Re: [..] Utilisation sur OS64bits

Posté : ven. 23 nov. 2012 13:12
par EricF
Non, justement, la clé Wow6432Node stocke justement les données pour les applis 32bits sur les OS 64bits.
http://www.windowsitpro.com/article/int ... key--25995
http://msdn.microsoft.com/en-us/library ... s.85).aspx

C'est dommage, ça nécessite d'utiliser la vraie clé sur les OS x64.

Comment utiliser la fonction RegQueryReflectionKey décrite sur http://msdn.microsoft.com/en-us/library ... s.85).aspx avec AutoIt ?

Re: [..] Utilisation sur OS64bits

Posté : ven. 23 nov. 2012 17:27
par sylvanie
Là sur le coup je passe la main :?
bonne chance

Re: [..] Utilisation sur OS64bits

Posté : ven. 23 nov. 2012 18:27
par Tlem
EricF a écrit :Non, justement, la clé Wow6432Node stocke justement les données pour les applis 32bits sur les OS 64bits.
C'est bien ce que sylvanie a essayé de vous faire comprendre.
When running on 64-bit Windows if you want to read a value specific to the 64-bit environment you have to suffix the HK... with 64 i.e. HKLM64.
Il est bien dit sous un OS 64 Bit et valeurs spécifiques à des applications 64 Bit.

Il faut comprendre par là que cela ne concerne pas toutes les applications et qu'il est fait état d'environnement !

Par acquis de conscience, je viens de regarder sur une machine sous Seven 64 et voici ce que je constate :
  • Test effectué avec une application 64 bit pure tel que 7-Zip x64 :
  • Pour un script compilé en 64 bit, la lecture de HKLM\Software\7-Zip\Path me donne la même chose que HKLM64\Software\7-Zip\Path
  • Pour un script compilé en 32 bit, la lecture de HKLM\Software\7-Zip\Path ne me donne rien alors que la lecture de HKLM64\Software\7-Zip\Path me donne le bon résultat.
Déduction, pour lire la valeur d'une clé de base de registre spécifique à une application 64 bit, préfixez toujours la clé HKxx avec 64 (cela permettra la compatibilité entre une compilation 32 bit ou 64 bit).

En ce qui concerne les applications, compatibles ou avec des modules 32 bit ou 64 bit (peut être la signification de Wow6432Node); elles enregistrent leurs informations dans Wow6432Node.
A savoir que pour la lecture du chemin d'installation de AutoIt sous Seven 64 bit, voici ce que je constate :
  • Que le script soit compilé en 32 ou 64 bit :
  • La lecture de HKLM\Software\Wow6462Node\AutoIt\InstallDir me donne le bon résultat.
  • La lecture de HKLM64\Software\Wow6462Node\AutoIt\InstallDir me donne le bon résultat.
Conclusion, pour lire une clé de registre d'une application 32 bit sur un système 64 bit que le script soit compilé en 32 bit ou 64 bit, on aura accès à la clé même si HKxx est préfixé avec 64. Par contre il faudra impérativement utiliser la sous-clé Wow6432Node.


Conclusion finale :
  • Si vous devez lire une clé de registre et que vous jonglez entre les compilations et les applications 32/64 bit, lisez d'abord HKxx64\. Si pas de résultat essayez HKxx64\xxx\Wow6432Node\.

    Pour faire un script qui sera compatible pour une compilation 32/64 Bit sur un OS 32/64 Bit, c'est à vous de prévoir les différents cas. Pour cela AutoIt vous donne quelques outils tel que les variables @AutoItX64, @OSArch afin de déterminer comment est compilé votre application et sur quelle architecture vous fonctionnez.
Voilà, je pense que vous avez toutes le clé (clé64) en mains. ;)

Re: [..] Utilisation sur OS64bits

Posté : ven. 23 nov. 2012 19:20
par EricF
Tlem a écrit :Conclusion, pour lire une clé de registre d'une application 32 bit sur un système 64 bit que le script soit compilé en 32 bit ou 64 bit, on aura accès à la clé même si HKxx est préfixé suffixé avec 64. Par contre il faudra impérativement utiliser la sous-clé Wow6432Node.
Justement, il s'agit bien d'une clé spécifique x64 pour les applis 32bits. Une appli 64bits créera ses infos dans HKLM\Software\xxxxx alors qu'une appli 32bits ira dans HKLM\Software\Wow6462Node\xxxxx (enfin, plus Windows que l'application elle-même, puisqu'une appli 32bits ne connait pas cette clé). Donc une lecture de HKLM64\Software\xxxxx devrait rediriger vers HKLM\Software\Wow6462Node\xxxxx, ce système étant prévu pour des raisons de compatibilité des applis 32bits.
The parent of each 64-bit registry node is the Image-Specific Node or ISN. The registry redirector transparently directs an application's registry access to the appropriate ISN subnode. Redirection subnodes in the registry tree are created automatically by the WOW64 component using the name Wow6432Node. As a result, it is essential not to name any registry key you create Wow6432Node.
Enfin bon, j'ai pu récupérer les informations nécessaires, c'est l'important.

Re: [..] Utilisation sur OS64bits

Posté : sam. 24 nov. 2012 15:52
par Tlem
Hummm, je vois que vous n'avez pas saisit la subtilité de ce que j'ai essayé de vous expliquer. Mais bon, si vous avez réussit à trouver comment obtenir votre information, tout est bien qui finit bien. ;)