125 votes

comment obtenir la variable d'environnement x86 des fichiers du programme ?

Je voudrais savoir comment je peux afficher l'emplacement de Program Files (x86) dans l'invite de commande. J'utilise Windows 7 64 bits.

J'ai essayé :

echo %programfiles(x86)% y echo %programfiles% ,
qui affichent tous deux uniquement C:\Program Files

Quand j'ai vérifié manuellement le registre,
HKLM/Software/microsoft/Windows/version actuelle ,
le site programfilesdir Les points suivants C:\Program Files y

HKLM/Software/WOW64/Microsoft/winodws/currentversion ,
le site programfilesdir Les points suivants C:\Program Files (x86) .

Mais, pourquoi suis-je toujours affiché avec C:\Program Des fichiers ?

11 votes

Je pense que la vraie question est la suivante : pourquoi n'existe-t-il pas une version de %programfiles% qui pointe toujours vers x86 à la fois sur Windows 7 et Windows xp pour simplifier l'exécution des programmes qui sont installés sur les deux ? Par exemple, après avoir installé Debugging Tools for Windows (x86) sur XP, il se trouve dans Program Files mais sur Windows 7, il se trouve dans Program Files (x86), ce qui signifie qu'il n'y a pas de %programfiles%. simple pour créer un fichier de commande qui peut être distribué sur tous les ordinateurs, car aucune des variables d'environnement intégrées ne pointe systématiquement vers l'emplacement 32 bits de Program Files.

0 votes

[IMHO, un point qui manque dans cette discussion est que, quelle que soit la variable que vous utilisez, il est garanti qu'elle pointe toujours vers le dossier approprié. Ceci devient critique dans les rares cas où Windows est installé sur un lecteur autre que C:\.

210voto

SecurityMatt Points 3467

Sur une machine 64 bits fonctionnant en mode 64 bits :

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> C:\Program Files (x86)

Sur une machine 64 bits fonctionnant en mode 32 bits (WOW64) :

  • echo %programfiles% ==> C:\Program Files (x86)
  • echo %programfiles(x86)% ==> C:\Program Files (x86)

Sur une machine 32 bits fonctionnant en mode 32 bits :

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> %programfiles(x86)%

18 votes

Quel %programfiles(x86)% retournera sur une machine 32 bits en mode 32 bits ?

0 votes

Sous Windows XP (x86), cela ne fonctionne pas, vous devez mettre %programfiles%. Je pense que le seul moyen est de vérifier par code la version du système d'exploitation d'abord et ensuite d'utiliser une variable ou l'autre.

4 votes

Il peut être utile d'ajouter %ProgramW6432% à la liste ci-dessus.

41voto

viniciussss Points 1778

Une autre variable d'environnement pertinente est :

%ProgrammeW6432%

Ainsi, sur une machine 64 bits fonctionnant en mode 32 bits (WOW64) :

  • echo %programfiles% ==> C:\Program Fichiers (x86)
  • echo %programfiles(x86)% ==> C:\Program Fichiers (x86)
  • echo %ProgrammeW6432% ==> C:\Program Archivos

De Wikipedia :

La variable %ProgramFiles% pointe vers le répertoire Program Files, qui stocke tous les programmes installés de Windows et autres. Le site par défaut sur les systèmes de langue anglaise est " C:\Program Fichiers". Dans les éditions 64 bits de Windows (XP, 2003, Vista), il y a également %ProgramFiles(x86)%, dont la valeur par défaut est " C:\Program Files (x86)", et %ProgramW6432%, dont la valeur par défaut est " C:\Program Fichiers". Le site %ProgramFiles% dépend lui-même du fait que le processus demandant la variable d'environnement est lui-même 32 bits ou 64 bits (ceci est causé par la redirection 64 bits de Windows sur Windows).

Référence : http://en.wikipedia.org/wiki/Environment_variable

4 votes

Meilleure référence : MSDN : Détails de l'implémentation de WOW64 - "Les variables d'environnement ProgramW6432 et CommonProgramW6432 ont été ajoutées à partir de Windows 7 et Windows Server 2008 R2." Wikipédia contredit directement ces propos ; il est intéressant de noter que Wikipédia ne liste que les trois versions qui Ne le fais pas. supportent cette variable selon MSDN. Malheureusement, je n'ai pas de XP/Vista 64 bits à tester.

1 votes

En deuxième lecture, je constate que l'exigence de Windows 7/2008 R2 ne s'applique qu'aux processus 64 bits. La variable est définie uniquement pour les processus 32 bits sur Vista x64.

5voto

Sur une machine Windows 64 bits, echo %programfiles(x86)% s'affiche. C:\Program Fichiers (x86)

4voto

KarolaN Points 178

Sur un système Windows 64 bits, la lecture des diverses variables d'environnement et de certaines clés du Registre Windows est redirigé à différentes sources, selon que le processus effectuant la lecture est de 32 ou 64 bits.

Le tableau ci-dessous énumère ces sources de données :

X = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
Y = HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion
Z = HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

READING ENVIRONMENT VARIABLES:    Source for 64-bit process               Source for 32-bit process
-------------------------------|----------------------------------------|--------------------------------------------------------------
                %ProgramFiles% :  X\ProgramW6432Dir                       X\ProgramFilesDir (x86)
           %ProgramFiles(x86)% :  X\ProgramFilesDir (x86)                 X\ProgramFilesDir (x86)
                %ProgramW6432% :  X\ProgramW6432Dir                       X\ProgramW6432Dir

          %CommonProgramFiles% :  X\CommonW6432Dir                        X\CommonFilesDir (x86)
     %CommonProgramFiles(x86)% :  X\CommonFilesDir (x86)                  X\CommonFilesDir (x86)
          %CommonProgramW6432% :  X\CommonW6432Dir                        X\CommonW6432Dir

                 %ProgramData% :  Z\ProgramData                           Z\ProgramData

      READING REGISTRY VALUES:    Source for 64-bit process               Source for 32-bit process
-------------------------------|----------------------------------------|--------------------------------------------------------------
             X\ProgramFilesDir :  X\ProgramFilesDir                       Y\ProgramFilesDir
       X\ProgramFilesDir (x86) :  X\ProgramFilesDir (x86)                 Y\ProgramFilesDir (x86)
            X\ProgramFilesPath :  X\ProgramFilesPath = %ProgramFiles%     Y\ProgramFilesPath = %ProgramFiles(x86)%
             X\ProgramW6432Dir :  X\ProgramW6432Dir                       Y\ProgramW6432Dir

              X\CommonFilesDir :  X\CommonFilesDir                        Y\CommonFilesDir
        X\CommonFilesDir (x86) :  X\CommonFilesDir (x86)                  Y\CommonFilesDir (x86)
              X\CommonW6432Dir :  X\CommonW6432Dir                        Y\CommonW6432Dir

Ainsi, par exemple, pour un processus de 32 bits, la source des données pour le processus de %ProgramFiles% y %ProgramFiles(x86)% variables d'environnement est la valeur du registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86) .

Cependant, pour un processus 64 bits, la source des données de l'indicateur %ProgramFiles% La variable d'environnement est la valeur du registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramW6432Dir ...et la source des données pour la %ProgramFiles(x86)% La variable d'environnement est la valeur du registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86)

La plupart des installations Windows par défaut mettent une chaîne comme C:\Program Files (x86) dans la valeur du registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86) mais cela (et d'autres) peut être changé.

Tout ce qui est saisi dans ces valeurs du registre Windows sera lu par l'Explorateur Windows dans les variables d'environnement respectives lors de la connexion, puis copié dans tout processus enfant qu'il génère ensuite.

La valeur du registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesPath est particulièrement remarquable parce que la plupart des installations Windows mettent la chaîne de caractères %ProgramFiles% en elle, pour être lue par les processus 64 bits. Cette chaîne fait référence à la variable d'environnement %ProgramFiles% qui, à son tour, tire ses données de la valeur du registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramW6432Dir ...à moins qu'un programme ne change la valeur de cette variable d'environnement apriori.

J'ai écrit un petit utilitaire, qui affiche ces variables d'environnement pour les processus 64 bits et 32 bits. Vous pouvez le télécharger aquí .
Le code source de VisualStudio 2017 est inclus et les exécutables binaires 64 et 32 bits compilés se trouvent dans les répertoires suivants ..\x64\Release y ..\x86\Release respectivement.

0voto

Amir Katz Points 451

À mon avis, un point qui manque dans cette discussion est que, quelle que soit la variable que vous utilisez, il est garanti qu'elle pointe toujours vers le dossier approprié. Cela devient critique dans les rares cas où Windows est installé sur un lecteur autre que C:\.

1 votes

C'est une bonne note. Mais comme elle ne répond pas directement à la question, il aurait été préférable de l'écrire comme un commentaire à la question elle-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X