TL; DR:
Підсумовуючи, ні, це не обов’язково ; вони могли б використовувати одну папку, і ні, Windows не представляє себе інакше програмою, що запускається з того чи іншого місця.
Ну, начебто, всі кидають свою думку з цього приводу, тож я підкину свої 2 ¢. Інші вже здогадалися про причини, чому Microsoft вирішила створити окремі папки верхнього рівня для 32-бітної та 64-бітної версій програм, тому я залишу цю частину (найкращою причиною було пояснення Девіда, що це як зручність для програмістів). Звичайно, навіть тоді це не зовсім вирішує прямий питання, чому це взагалі потрібно? , на що імовірно відповідає: це не так .
Натомість я торкнуся основного питання
Чи якимось чином Windows по-різному представляє себе програмою, у якої закінчується програма «Файли програм (x86)»?
Не дуже, але розташування програми може вплинути на поведінку, але не так, як ви думаєте.
Під час запуску програми Windows встановлює середовище, в якому її запускати (я маю на увазі пам'ять, адресу тощо, а не лише змінні середовища). Це середовище залежить від вмісту виконуваного файлу (32-розрядні та 64-бітні програми внутрішньо відрізняються). Коли ви запускаєте 32-бітну програму в 64-бітній системі, вона працює в 32-бітній підсистемі, яка імітує 32-бітове середовище. Він називається WoW64 (WoW64 розшифровується як Windows у Windows 64-розрядному ) і схожий на те, як 16-бітні додатки запускалися в XP за допомогою NTVDM .
Якщо ви запускаєте програму з правами адміністратора або без них, це впливає на її запуск, але розташування не повинно впливати на це (хоча є деякі приклади залежності розташування, як, наприклад, деякі драйвери).
(Я використовую інший комп'ютер, тому я не можу покладатися на мою історію браузера , щоб повернутися назад мої кроки, але на інший день, відповідаючи на цей СУ питання я закінчив в цьому 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-розрядні версії програми. Як сказав Девід, програмісту просто легше, якщо вони тримаються окремо (тобто, використовуючи змінні, щоб зробити вигляд, що існує лише один набір файлів тощо).