TL; DR:
Подводя итог, нет, это не обязательно ; они могли бы использовать одну папку, и нет, Windows не выглядит иначе, чем программа, запускаемая из того или иного места.
Ну, все, кажется, высказывают свое мнение по этому поводу, поэтому я брошу свои 2 ¢. Другие уже предположили причины, по которым Microsoft решила создать отдельные папки верхнего уровня для 32-разрядных и 64-разрядных версий программ, поэтому я оставлю эту часть (лучшей причиной было объяснение Дэвида, что это как удобство для программистов). Конечно, даже тогда, это не совсем решает прямой вопрос, почему это вообще необходимо?, на который, по-видимому, ответ: это не так.
Вместо этого я рассмотрю основную часть вопроса
Windows как-то отличается от программы, в которой заканчивается «Program Files (x86)»?
Не совсем, но расположение программы может повлиять на поведение, но не так, как вы думаете.
Когда вы запускаете программу, Windows устанавливает среду, в которой она запускается (я имею в виду память, адресацию и т.д., А не только переменные среды). Эта среда зависит от содержимого исполняемого файла (32-битные и 64-битные программы внутренне различаются). Когда вы запускаете 32-битную программу в 64-битной системе, она запускается в 32-битной подсистеме, которая эмулирует 32-битную среду. Он называется WoW64 (WoW64 означает Windows на 64-битной Windows) и похож на то, как 16-битные приложения будут запускаться в XP с использованием NTVDM.
Когда вы запускаете программу с правами администратора или без них, это влияет на то, как она работает, но местоположение не должно влиять на нее (хотя есть некоторые примеры зависимости от местоположения, например, некоторые драйверы).
(Я использую другой компьютер, поэтому я не могу полагаться на историю своего браузера, чтобы отследить свои шаги, но на днях, отвечая на этот вопрос SU, я оказался на этом вопросе SO, который привел меня к Google PROCESSOR_ARCHITEW6432, который привел к этому вопросу SO и это публикация в блоге Microsoft.)
Где-то по пути я читал пост StackOverflow о том, как переменная окружения %processor_architecutre%
дает разные результаты в зависимости от того, откуда вы запускаете командную строку (я постараюсь найти точную цитату).
Ответ оказался обусловлен тем, была ли запущена 32-разрядная или 64-разрядная версия командной строки (т. Е. Из System32\
или SysWoW64\
). Другими словами, хотя местоположение, кажется, влияет на поведение программы, это происходит только потому, что существуют разные версии программы, а не потому, что Windows обрабатывает папку особым образом.
Это имеет смысл, поскольку содержимое исполняемого файла определяет, является ли оно 32-разрядным или 64-разрядным, поэтому вы можете поместить как 32-разрядную, так и 64-разрядную копию одной и той же программы (например, foobar32.exe
и foobar64.exe
) в в ту же папку, и когда вы выполните их, они будут загружены правильно (64-битная версия будет работать изначально, а 32-битная - на уровне эмуляции WoW64).
FreePascal позволяет устанавливать версии как для DOS, так и для Windows, и они находятся в одной папке: %programfiles%\FreePascal
. Он управляет различными архитектурами, храня исполняемые файлы (.exe
, .sys
, .dll
, .ovr
и т.д.) В отдельных папках и обмениваясь файлами ресурсов, такими как картинки, исходные файлы и т.д.) Нет технической причины, по которой это нельзя было бы сделать для 32- и 64-разрядных версий программы. Как сказал Дэвид, программисту будет проще, если они будут храниться отдельно (т. Е. Использовать переменные, чтобы они выглядели так, будто существует только один набор файлов и т.д.)