Nécessité de lire la valeur de registre de la machine Windows 32 bits et 64 bits

Je dois lire certaines valeurs de registre en utilisant un fichier .cmd. J’utilise la commande suivante à cette fin.

FOR /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Looptest" /v "tscFile"') do set "TSCFile=%%b" 

Le problème est que, lorsque j’installe le logiciel sur 32 bits, le chemin du registre est: "HKLM\SOFTWARE\Looptest" et lorsque "HKLM\SOFTWARE\Looptest" le logiciel sur un ordinateur 64 bits, le chemin devient: "HKLM\SOFTWARE\Wow6432Node\Looptest"

Est-il possible de lire les clés sans connaître la version de l’OS?

Bien sûr, je sais qu’au départ je peux vérifier la version du système d’exploitation et ensuite écrire le code en conséquence. Mais, à part ça, y a-t-il une autre façon de le faire?

Merci !

Est-ce que REQ QUERY /? et notez le / reg: 32 et / reg: 64 commutateurs. Ajoutez ensuite quelque chose comme ceci au début de votre fichier de chauve-souris (avant de faire des opérations de reg) afin qu’il fonctionne sur les machines 32 ou 64 bits.

 set "Reg32=" set "Reg64=" if defined Programfiles(x86) set "Reg64=/reg:64" & set "Reg32=/reg:32" 

Cela présente l’avantage supplémentaire que vous pouvez spécifier une zone de registre 32 bits ou 64 bits sur des ordinateurs 64 bits en utilisant la variable Regnn appropriée pour vos opérations de registre. En supposant que vous vouliez la zone de registre 64 bits lorsque vous êtes sur une machine 64 bits, votre exemple deviendrait alors:

 FOR /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Looptest" /v "tscFile" %Reg64%') do set "TSCFile=%%b" 

Et comme% Reg64% n’est pas défini sur une machine 32 bits, votre code fonctionnera correctement aussi.

Réponse courte: non.

Réponse longue: les versions de Windows x64 décideront automatiquement de lire à partir du noeud Wow6432 lors de l’exécution de processus 32 bits (redirection transparente). Donc, si vous pouvez vous assurer que votre commande est exécutée dans un processus 32 bits, vous pouvez vous fier à ce mécanisme et ne pas avoir à vous soucier du nœud Wow6432.

Si votre commande s’exécute en tant que processus 64 bits, vous devez rechercher le bon endroit par vous-même.

Vous pouvez exécuter un cmd 32 bits sur une fenêtre 64 bits en appelant %windir%\SysWoW64\cmd.exe . Malheureusement, le dossier SysWoW64 est manquant sur les fenêtres 32 bits. Vous devez donc prendre la décision plus tôt …

Après avoir eu une idée de la réponse de RGuggisberg, j’ai changé mon code comme ceci:

 @echo off set replacementSsortingng= if defined Programfiles(x86) set "replacementSsortingng=Wow6432Node\" FOR /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\%replacementSsortingng%Looptest" /v "tscFile"') do set "TSCFile=%%b" echo %TSCFile% 

Merci!