Манифест, включенный в ваши двоичные файлы, автоматически генерируется системой сборки VS. Важными заголовками, определяющими зависимость от версии, которая передается в манифест, являются vc \ include \ crtassem.h и crtdefs.h. Первый заявляет версию CRT. Обратите внимание, что он уже поддерживает RTM-версию по сравнению с «последней» версией с макросом _BIND_TO_CURRENT_CRT_VERSION. Последний содержит директивы комментария #pragma для встраивания опции компоновщика / manifestdependency в файл .obj, что, в свою очередь, заставляет компоновщик автоматически генерировать манифест.
Вам не нужно делать это таким образом, вы можете просто отключить параметры компоновщика, которые генерируют манифест, и написать свой собственный. Это дает вам полный контроль над версией CRT, к которой привязано ваше приложение. Являетесь ли вы впереди с этим немного сомнительно. Вы, вероятно, все еще отправляете старую версию CRT, которая была обновлена в июле прошлого года, она содержала критическую ошибку безопасности. Клиенты, как правило, недовольны тем, что на их компьютере устанавливается программное обеспечение с хорошо документированными и исправленными недостатками безопасности.
Следующее, что вам нужно сделать, это взять под контроль развертывание библиотек DLL. Вам придется самостоятельно развертывать библиотеки DLL в параллельном кэше WinSxS.
Это сработает, если вы поймете, как, но вряд ли оно выживет очень долго. Центр обновления Windows, если он включен, может обнаружить, что машина использует непатченную версию библиотек DLL, и обновит ее. И разверните политику издателя для перенаправления запросов на загрузку. Вполне вероятно, что на вашем компьютере установлен такой файл политики, если вы видите, что ваш манифестированный запрос версии приводит к загрузке другой версии. Несколько неизбежный вывод заключается в том, что это DLL-библиотека MSFT, и они будут делать с ней то, что они считают необходимым. Посмотрите на развертывание applocal, чтобы избежать этого.