Что особенного в исполняемых файлах, скомпилированных с Visual Studio 11, в результате чего исполняемые файлы не могут быть выполнены в Windows XP? - PullRequest
31 голосов
/ 09 октября 2011

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

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

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

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

Ответы [ 4 ]

21 голосов
/ 09 октября 2011

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

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

8 голосов
/ 18 июня 2012

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

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

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

Редактировать : теперь это произошло (фу!)

4 голосов
/ 18 июня 2012

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

Подробнее здесь: Цель Windows XP в Visual Studio11 Beta с использованием компилятора и библиотек 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

1 голос
/ 18 июня 2012

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

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

...