Подтвердить что ты не робот

Что особенного в исполняемых файлах, скомпилированных с помощью Visual Studio 11, что приводит к тому, что исполняемые файлы не могут быть выполнены в Windows XP?

Я скомпилирую свой исходный код на С++ с помощью Visual Studio 11 Developer Preview. Я статически ссылаюсь на библиотеку времени выполнения.

Результирующий исполняемый файл не может быть выполнен в Windows XP. Когда я пытаюсь выполнить его в Windows XP, я получаю сообщение об ошибке "[Исполняемый путь] не является допустимым приложением Win32.".

В соответствии с Microsoft Visual Studio 11 не будет поддерживать Windows XP.

Как это работает, что исполняемый файл не может быть выполнен в Windows XP? Есть ли что-то особенное в исполняемом файле?

4b9b3361

Ответ 1

Кажется, что они отказываются от поддержки старых систем в каждой новой версии VS (NT4,2000, XP) Даже если вы не используете CRT вообще, они все еще вынуждают версию подсистемы PE к большим числам. Вы можете обойти это с помощью изменения числа от до 5.0 на этапе пост-сборки. Простое изменение этих чисел должно позволить exe запускаться на XP, если новый CRT не использует функции WinAPI, которых нет в XP.

Другой альтернативой, если вы хотите использовать VS11, является использование многоцелевых и старых компиляторов...

Ответ 2

Visual Studio 2012 сможет ориентироваться на Windows XP позднее в 2012 году:

Ориентация Windows XP на С++ в Visual Studio 2012

"Позже этой осенью Microsoft представит обновление для Visual Studio 2012, которое позволит приложениям С++ ориентироваться на Windows XP. Это обновление внесит необходимые изменения в компилятор Visual С++ 2012, среду выполнения и библиотеки, чтобы разработчики могли создавать приложений и DLL, которые работают в Windows XP и более поздних версиях, а также Windows Server 2003 и выше."

Изменить: это произошло (phew!)

Ответ 3

Обходной путь заключается в использовании другого Platform Toolset, который свяжет другую версию CRT и создаст двоичные файлы, совместимые с более старыми операционными системами.

Подробнее здесь: Целевая Windows XP в бета-версии Visual Studio 11 с использованием компилятора и библиотек Visual Studio 2010.

С помощью инструментария v90 ваш двоичный файл сможет работать даже в более старых системах, таких как Windows 2000.

http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/7444.BlogPic.png

Ответ 4

Библиотеки времени выполнения, в комплекте с VS 2010 и более поздними версиями, принуждают ваш исполняемый файл импортировать две новые функции из kernel32.dll, отсутствующие в Windows XP: EncodePointer и DecodePointer. Это необходимо для еще одной идиотической наивной попытки повысить безопасность программного обеспечения.

В VS 2010 существует возможность использовать библиотеки времени исполнения Visual Studio 2008, которые решают эту проблему. Я не знаю, есть ли такая опция в более поздних версиях VS.