TL; DR:
Pour résumer, non, ce n'est pas nécessaire ; ils auraient pu utiliser un seul dossier, et non, Windows ne se présente pas différemment à un programme exécuté depuis un emplacement ou un autre.
Eh bien, tout le monde semble avoir son opinion à ce sujet, alors je vais lui donner 2 ¢. D’autres ont déjà spéculé sur les raisons pour lesquelles Microsoft a choisi de créer des dossiers de niveau supérieur distincts pour les versions 32 bits et 64 bits des programmes. C’est pourquoi je laisserai cette partie commodité pour les programmeurs). Bien sûr, même alors, cela ne répond pas tout à fait à la question directe: pourquoi cela est-il même nécessaire? , à laquelle la réponse est probablement: ce n'est pas .
Au lieu de cela, je vais aborder le corps de la question
Windows se présente-t-il d'une manière ou d'une autre différemment d'un programme utilisant "Program Files (x86)"?
Pas vraiment, mais l'emplacement du programme peut influer sur le comportement, mais pas de la manière que vous pensez.
Lorsque vous exécutez un programme, Windows configure un environnement dans lequel l'exécuter (en termes de mémoire, d'adressage, etc., et pas uniquement de variables d'environnement). Cet environnement dépend du contenu de l'exécutable (les programmes 32 bits et 64 bits diffèrent en interne). Lorsque vous exécutez un programme 32 bits sur un système 64 bits, il s'exécute dans le sous-système 32 bits qui émule un environnement 32 bits. Il s'appelle WoW64 (WoW64 signifie Windows sur Windows 64 bits ) et est similaire à la façon dont les applications 16 bits seraient exécutées dans XP à l'aide du NTVDM .
Lorsque vous exécutez un programme avec ou sans privilèges d'administrateur, cela a une incidence sur son exécution, mais l'emplacement ne devrait pas l'affecter (bien qu'il existe des exemples de dépendance d'emplacement, comme certains pilotes, par exemple).
(J'utilise un autre ordinateur. Je ne peux donc pas me fier à l'historique de mon navigateur pour revenir en arrière. Mais l'autre jour, en répondant à cette question du SU, je me suis retrouvé face à cette question SO qui m'a amené à Google PROCESSOR_ARCHITEW6432 qui a conduit à cette question SO et cet article de blog Microsoft .)
En cours de route, j'ai lu un article de StackOverflow sur la façon dont la variable d'environnement %processor_architecutre%
donne des résultats différents selon l'endroit où vous exécutez l'invite de commande (je vais essayer de trouver la citation exacte).
La réponse s'est avérée être due si la version 32 bits ou 64 bits de l'invite de commande a été exécutée (c'est-à-dire, à partir de System32\
ou SysWoW64\
). En d'autres termes, si l'emplacement semble affecter le comportement du programme, c'est uniquement parce qu'il existe différentes versions du programme et non pas parce que Windows traite le dossier de manière particulière.
Cela a du sens, car le contenu du fichier exécutable indique s'il s'agit d'un fichier 32 bits ou 64 bits. Vous pouvez donc placer une copie 32 bits et 64 bits du même programme (par exemple, foobar32.exe
et foobar64.exe
) dans le même dossier et lorsque vous le souhaitez. exécutez-les, ils seront chargés correctement (la version 64 bits sera exécutée de manière native et la version 32 bits sera exécutée dans la couche d'émulation WoW64).
FreePascal vous permet d'installer les versions DOS et Windows et ils vont dans le même dossier: %programfiles%\FreePascal
. Il gère les différentes architectures en gardant les fichiers exécutables ( .exe
, .sys
, .dll
, .ovr
, etc.) dans des dossiers séparés et le partage de fichiers de ressources comme des images, source-fichiers, etc.) Il n'y a aucune raison technique que cela ne pouvait être fait aussi pour et 32- Versions 64 bits d'un programme. Comme David l'a dit, il est tout simplement plus facile pour le programmeur de les garder séparés (en utilisant des variables pour donner l'impression qu'il n'y a qu'un seul jeu de fichiers, etc.)