Чому Windows 7 встановлює 64-бітні програми в папку Файли програм (x86)? Чи можу я змінити поведінку?


12

Я використовую 64-бітну версію Windows 7 ще з CTP і зіткнувся з кількома проблемами з програмами, які встановлюються в C:\Program Files (x86)папку. Яка мета взагалі мати 2 окремі каталоги файлів програм?

Кожна програма, яку я встановив, переходила в C:\Program Files (x86)папку. Здається, це не має значення, чи додаток 32 або 64 біт. Чому не розміщуються 64-бітні програми C:\Program Files?

Чи є спосіб змінити типово, щоб бути C:\Program Filesзамість цього? Чи буде це щось зіпсувати, якби я просто все вклав C:\Program Files?

Якщо дійсно є якась користь мати окрему папку для 64-бітних додатків, здається, що більш розумним за замовчуванням було б використовувати C:\Program Filesдля x86 додатків і створити нову C:\Program Files (x64)папку для нових 64-бітних додатків. Це допоможе зберегти зворотну сумісність. Я працюю розробником програмного забезпечення, і деякі мої проекти містять посилання на бібліотеки в розділі C:\Program Files. Тепер ці посилання розбиті на машині Windows 7, яка їх розмістила C:\Program Files (x86). Я навіть намагався змінити цільове місце в інсталяторі, щоб він був C:\Program Files, але це було проігноровано, і додаток C:\Program Files (x86)все-таки перейшов .

Це дуже засмучує, оскільки мені потрібно ділитися вихідним кодом між 32 та 64 бітовими машинами, і мені не хочеться возитися з деяким файлом конфігурації, який встановлює шлях до цих бібліотек по-різному на різних машинах.

Редагування щодо змінних оточення: (. Використання тільки по замовчуванням англійських значень змінних для простоти) на 64-бітну машині %ProgramFiles%буде в C:\Program Filesтой час як нові змінним %ProgramFiles(x86)%буде C:\Program Files (x86). Отже, якщо у вас є 32-розрядна програма, якій потрібно знайти шлях до папки, під яким вона буде встановлена, потрібно перевірити, чи працює вона в 32-бітній або 64-бітній версії Windows для того, щоб знати, яку змінну середовища використовувати. Будь-які 32-розрядні програми, написані без цього розгляду, потребують оновлення, щоб правильно працювати на 64-бітній машині. Таким чином, навіть використовуючи змінні середовища, зворотна сумісність порушена.

Також %ProgramFiles(x86)%не існує 32-бітної версії Windows. Якби це було, тоді 32-розрядні програми могли завжди завжди використовувати цю змінну середовища, і не потрібна була б умовна логіка, заснована на тому, на якій ОС вони працюють.


6
Ви впевнені, що ці програми справді є 64-розрядними? У більшості випадків ви знайдете програми, які просто сумісні з 64 бітами, але насправді є 32-розрядні програми.
Джон Т

Цікаво, якби використання %ProgramFiles%змінної середовища вирішило б це. Не впевнений, як він обробляє різницю x86 / 64bit.
ceejayoz

Відповіді:


7

Причиною цього є те, що багато старих інсталяторів або не розуміють нову структуру файлів, і розглядають все в стандартному каталозі файлів програм, або ви дивитесь на розумну програму, яка містить кілька 32-бітних компонентів, які там копіюються.

Ваша найкраща ставка - завантажити нову програму - наприклад x64 Winrar, і просто подивіться, де вона встановлюється, щоб просто виключити проблему з вашою машиною.

Що стосується того, що ви поплутаєте речі - це може, але це дійсно залежить від програми, немає жодної відповіді, яка підходить усім ... у деяких менших, компактних програм із лише кількома файлами не повинно виникнути проблем, де, якби ви говорили про Office , Adobe або будь-який інший "набір" або велика програма, це, швидше за все, не вдасться, оскільки у них є багато спільних компонентів, які є крос-архітектурою.


Отже, чому Microsoft не створив "C: \ Program Files" місце для 32-бітних програм, щоб ті старі інсталятори не викликали проблем. Крім того, я не дуже розумію, чому потрібно розлучення. Чому вони не можуть просто перейти в "C: \ Program Files"?
CoderDennis

Причина обох не може в тому, що деякі програми (особливо ті, що мають спільні компоненти) мають файли з однаковим іменем у 32-розрядному, як і 64-розрядному. Що стосується того, що саме так - я не маю уявлення, хтось, мабуть, мав дуже вагомі причини в той час, і він просто застряг як "справа, що треба робити".
Вільям Гілсум

4

Якщо ви використовуєте що-небудь, крім %ProgramFiles%(або CSIDL_PROGRAM_FILES, або під .NET Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)), у будь-якому випадку у вас виникають проблеми, оскільки власні установки можуть мати програми, встановлені під іншими томами (наприклад, D: наприклад), а міжнародні установки за замовчуванням мають інші папки.

  • Іспанське Вікно C:\Archivos de Programa,
  • Французьке Вікно C:\Programmes,
  • Німецьке Вікно C:\Programme,
  • Шведські вікна: C:\Program

тощо.


Я не згадував змінні середовища в своєму первісному запитанні, щоб зробити це просто. Я щойно додав правку, яка вказує на те, як %ProgramFiles%саме використання викликає проблему.
CoderDennis

3

Зауважте, що під 64-бітовими версіями Windows 7 (це може застосовуватися і до інших новіших версій ОС, але я можу підтвердити це лише для 64-бітної версії Win 7) є різниця між чітким розташуванням вашого% ProgramFiles% в досліднику та в DOS.

У Windows 7 фактичне розташування фізичної папки% ProgramFiles% (та пов'язана з ним% ProgramFiles (x86)% змінної environemnt) визначається відповідно до англійської версії ; тобто "C: \ програмні файли" та "C: \ програмні файли (x86)", відповідно, але відображається в провіднику, локалізованому у відповідних випадках.

Навести конкретний приклад; на шведській установці 64-бітної установки Windows 7, якщо ви відкриєте Провідник і загляньте в системний диск (як правило, C :), ви бачите папки " Програма " і " Програма (x86) ". Введення% ProgramFiles% в адресний рядок переміщує вас у "C: \ Program".

Однак якщо ви відкриєте поле DOS і введіть SET, ви побачите, що фактичне значення% ProgramFiles% - це "C: \ Program Files", а не програма "C: \ Program". Подальше вивчення CD та DIR ви можете побачити, як це фізично "C: \ Program Files"

Мораль полягає в тому, що якщо ви використовуєте змінну середовище або програму через API, все одно буде працювати, але пам'ятайте про цю тонку зміну, вивчаючи файлову систему!


У польській версії “Файли програм (x86)” є “Pliki programów (x86)”, а “Файли програм” - це… “Програмні файли”. У польській мові дивна граматика. Крім того, будь ласка, не називайте це коробкою DOS. Там немає DOS.
kinokijuf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.