Во-первых, это требование существует как для 32-битного, так и для 64-битного кода. Просто вам чуть больше повезет с 32-битным кодом, и кто-то другой установит его перед вами. Как это было на вашем компьютере разработчика с помощью установщика VS.
Это вызвано настройкой компилятора. Project + Properties, C / C ++, генерация кода, настройка библиотеки времени выполнения. Все шаблоны проектов в VS имеют этот параметр в / MD. Вы можете изменить его на / MT и больше не зависеть от библиотек времени выполнения, таких как msvcr90.dll. Код библиотеки времени выполнения будет связан с вашей программой вместо того, чтобы полагаться на библиотеки DLL, которые будут присутствовать на целевой машине.
Вы должны быть осторожны, однако, настройка / MD является безопасной настройкой. Это гарантирует, что у вас не возникнет проблем, когда вы создадите свои собственные библиотеки DLL и напишите код, который возвращает объекты C ++ (например, std :: string) или указатели, которые должны быть освобождены вызывающей стороной. Это не будет работать хорошо, если у DLL и EXE есть своя собственная копия CRT. Они будут использовать разные кучи, освобождение указателя на кучи не может работать должным образом. Тихая утечка в XP, сбой в Vista и выше.
Распространяемый .exe фактически подразумевается как загружаемый установщик, который ваш клиент может использовать, когда вы забудете написать установщик для вашей программы. Гораздо лучшим решением для вас будет написать установщик, который будет копировать и устанавливать все правильно. Это займет не более минуты, чтобы сделать один. Добавьте проект установки и развертывания + настройки в свое решение. Щелкните правой кнопкой мыши по нему, Добавить, Вывод проекта. Project + Properties, Prerequisites и установите флажок «Библиотеки среды выполнения Visual C ++ (x64)». Если вы предпочитаете создать свой собственный установщик, вы можете использовать модули слияния в C: \ Program Files (x86) \ Common Files \ Merge Modules
Да, и разверните сборку выпуска, а не сборку отладки. Отладочная версия CRT не распространяется.