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 о том, как переменная envirnoment %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-битные версии программы. Как сказал Дэвид, программисту будет проще, если они будут храниться отдельно (т. Е. Использовать переменные, чтобы они выглядели так, будто существует только один набор файлов и т. Д.)