[..] Utilisation sur OS64bits

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
EricF
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mar. 08 mars 2011 23:06
Status : Hors ligne

[..] Utilisation sur OS64bits

#1

Message 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
Modifié en dernier par EricF le ven. 23 nov. 2012 12:22, modifié 1 fois.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: Utilisation sur OS64bits

#2

Message par sylvanie »

les balises de titre svp
Merci.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Utilisation sur OS64bits

#3

Message 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
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
EricF
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mar. 08 mars 2011 23:06
Status : Hors ligne

Re: [..] Utilisation sur OS64bits

#4

Message 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.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Utilisation sur OS64bits

#5

Message 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 ...
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
EricF
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mar. 08 mars 2011 23:06
Status : Hors ligne

Re: [..] Utilisation sur OS64bits

#6

Message 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 ?
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Utilisation sur OS64bits

#7

Message par sylvanie »

Là sur le coup je passe la main :?
bonne chance
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Utilisation sur OS64bits

#8

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
EricF
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mar. 08 mars 2011 23:06
Status : Hors ligne

Re: [..] Utilisation sur OS64bits

#9

Message 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.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Utilisation sur OS64bits

#10

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre