2015-12-16 4 views
1

Je suis en train d'écrire un script batch pour mettre à jour un progiciel (désinstallez la vieille version /installez un nouveau). Cela doit être fait sur le réseau comme il y a 500 PC à mettre à jour. L'une des premières étapes avant la désinstallation consiste à vérifier si le logiciel est installé ou non. Afin de vérifier que je questionne le Registre:Divergence REG QUERY local vs remote script batch

reg query "HKLM\SOFTWARE\A.E.T Europe B.V." 

Cette requête donne des résultats adecuate lors de l'exécution en local (à des fins de test), mais quand je le lance à distance (sa sera RAN) retourne faux résultats.

reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V." 

renvoie 0 si j'exécute cette ligne localement. Mais si je me connecte à I301 et exécute la requête renvoie localement 1, étant la vérité que A.E.T Europe B.V. apparaît sous la branche Wow6432Node dans le registre Windows.

Pourquoi est-ce ???

Merci d'avance!

Répondre

3

S'il y a sur Windows x64 juste la clé

HKLM\SOFTWARE\Wow6432Node\A.E.T Europe B.V. 

mais aucune clé

HKLM\SOFTWARE\A.E.T Europe B.V. 

la raison du résultat différent est provoqué le plus probable par la version de reg.exe est exécutée à partir du fichier batch ou ligne de commande.

La clé ne se trouve pas si 64 bits %SystemRoot%\System32\reg.exe est exécuté sur le traitement du fichier batch ou exécutant la commande de 64 bits %SystemRoot%\System32\cmd.exe sur l'utilisation de la ligne

reg query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V." 

Mais la clé se trouve si 32 bits %SystemRoot%\SysWOW64\reg.exe est exécuté sur le traitement du fichier de commandes ou d'exécuter la commande de 32 bits %SystemRoot%\SysWOW64\cmd.exe sur l'utilisation de la ligne

reg query "HKLM\SOFTWARE\A.E.T Europe B.V." 

parce que pour les applications 32 bits l'accès au registre à HKLM\SOFTWARE est redirigé vers HKLM\SOFTWARE\Wow6432Node par le redirecteur de registre.

Vérifiez les emplacements possibles clés:

@echo off 
%SystemRoot%\System32\ping.exe -n 1 I301 >nul 
if errorlevel 1 (
    echo Computer with name I301 is not available in network. 
    goto :EOF 
) 

%SystemRoot%\System32\reg.exe query "\\I301\HKLM\SOFTWARE\A.E.T Europe B.V." >nul 2>&1 
if not errorlevel 1 goto Installed 
%SystemRoot%\System32\reg.exe query "\\I301\HKLM\SOFTWARE\Wow6432Node\A.E.T Europe B.V." >nul 2>&1 
if not errorlevel 1 goto Installed 

echo A.E.T Europe B.V. is not installed. 
goto :EOF 

:Installed 
echo A.E.T Europe B.V. is installed already. 

Voir également les articles Microsoft:

1

Bonne réponse de Mofi. Sur les systèmes 64 bits, vous pouvez également utiliser

/reg: 32 &/reg: 64 Voir REG QUERY /?

Vous pouvez parfois avoir des problèmes si vous lancez CMD.exe d'une autre application. Si cette application est une application 32 bits, il va lancer la version 32 bits de CMD.exe

0

Merci Mofi et RGuggisberg,

Découvert sur tout Mofi dit (et complété RGuggisberg) plus tard le jour. Comme je ne pouvais pas le faire fonctionner, j'ai essayé de vérifier l'entrée Uninstall dans le registre, pensant qu'il serait là et seulement là. Après avoir de nouveau obtenu des résultats similaires, j'ai fait un peu plus de recherche sur Google et découvert que Windows avait deux arbres dans le registre: un pour les applications 32 bits et un autre pour 64 bits. L'indice a été donné par:

A la fin, il montre les deux options qui RGuggisber mentionne/reg: 32 &/reg: 64. Les regarda et trouva l'existence des deux registres.

Essayé même requête (pour désinstallés) mais en utilisant/reg: 64 et trouvé la clé que je cherchais. Essayé avec/reg: 32 et en effet ne pouvait pas le trouver. La machine sur laquelle je cours le script exécute Windows 7 32 bits. La machine distante Windows 8.1 64 bits.