Почему некоторые программы, скомпилированные для x86, не запускаются под x64, а некоторые

Я видел, что некоторые программы, которые были написаны мной и собраны для x86 с использованием ml.exe, отлично работают на моей Win 7 x64. Я считаю, что это из-за технологии Wow.

Однако есть некоторые программы (написанные не мной), которые не запускаются. Они выдают следующее сообщение об ошибке: Версия этого файла несовместима с используемой вами версией Windows. Проверьте информацию о своей компьютерной системе, чтобы узнать, нужна ли вам версия программы x86 (32-разрядная) или x64 (64-разрядная), а затем обратитесь к издателю программного обеспечения.

Есть ли способ изменить EXE этих программ, чтобы он работал на Win 7 x64. В чем принципиальное отличие этих программ от других программ, работающих прозрачно.


person Madhur Ahuja    schedule 29.11.2010    source источник


Ответы (2)


На самом деле это 8- или 16-битные программы. Windows x64 работает в длинном режиме, который не поддерживает виртуальный режим 8086, необходимый для таких программ. Невозможно заставить их работать, кроме как перекомпилировать их из исходного кода или запустить на виртуальной машине.

person Ignacio Vazquez-Abrams    schedule 29.11.2010
comment
8-битные программы, да? Давненько я таких не видел... ;-) - person Paul R; 29.11.2010
comment
На самом деле это может быть не совсем так. См. здесь: social.answers .microsoft.com/Forums/en-US/w7programs/thread/ . - person Madhur Ahuja; 29.11.2010
comment
@Madhur: Кажется, в этой ветке нет никакой информации, просто куча ссылок, ни одна из которых не имеет отношения к WOW64. - person Ben Voigt; 29.11.2010
comment
Спасибо, я имел в виду, что 16-битная программа - не единственная причина этого сообщения об ошибке. Это может быть и другая причина, которая неизвестна. - person Madhur Ahuja; 29.11.2010

Одной из причин может быть комбинация .NET и нативных библиотек. Библиотеки .NET компилируются во время выполнения как x64 (если вы явно не укажете x86), а собственные библиотеки работают в режиме x86. это не может работать вместе.

Другая причина — доступ к реестру. В зависимости от используемого API, x86app в режиме wow64 может быть перенаправлен в другую часть реестра. Если API-интерфейс доступа к реестру несовместим, это может создать проблему.

person Tomas Kubes    schedule 15.03.2013