Почему Windows 7 устанавливает 64-разрядные приложения в папку Program Files (x86)? Могу ли я изменить поведение?

12

Я использую 64-битную версию Windows 7 начиная с CTP и столкнулся с несколькими проблемами с приложениями, которые устанавливаются в C:\Program Files (x86)папку. Какова цель иметь 2 отдельных каталога Program Files?

Каждая программа, которую я установил, попала в 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-разрядные приложения могли бы всегда использовать эту переменную среды и не нуждаться в какой-либо условной логике, в зависимости от того, на какой ОС они работают.

CoderDennis
источник
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

и т.п.

Zano
источник
Я не упомянул переменные среды в своем первоначальном вопросе, чтобы сделать его простым. Я только что добавил правку, которая указывает на то %ProgramFiles%, что именно использование вызывает проблему.
CoderDennis
3

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

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

Предоставить конкретный пример; в 64-разрядной установке Windows 7 в Швеции, если вы открываете Проводник и просматриваете системный диск (обычно C :), вы видите папки « Program » и « Program (x86) ». Ввод% ProgramFiles% в адресную строку переводит вас в «C: \ Program».

Однако, если вы откроете окно DOS и наберете SET, вы увидите, что фактическое значение% ProgramFiles% - это «C: \ Program Files», а не средство просмотра папок «C: \ Program». Дальнейшие исследования с CD и DIR вы можете увидеть физически, это "C: \ Program Files"

Мораль такова, что если вы используете переменные среды или программу через API, все будет работать, но помните об этом тонком изменении при изучении файловой системы!

Пит Стенсонес
источник
В польской версии «Program Files (x86)» это «Pliki programów (x86)», а «Program Files», ну… «Program Files». У польского есть странная грамматика. Кроме того, пожалуйста, не называйте это коробкой DOS. Там нет DOS.
kinokijuf