Что Windows делает с приложением, когда оно запускается в режиме совместимости?
В него вставлены несколько совместимых прокладок, которые имитируют старое поведение или ошибки.Иногда это необходимо, поведение некоторых программ зависит от старых ошибок, которые с тех пор были исправлены;или они использовали недокументированную функциональность.
Запись в блоге Джоэла, Как Microsoft потеряла API War дает хороший пример этого:
Я впервые услышал об этом отодин из разработчиков популярной игры SimCity, который сказал мне, что в его приложении была критическая ошибка: оно использовало память сразу после ее освобождения, главное нет-нет, которая работала нормально в DOS, но не работала в Windows, гдеОсвободившаяся память, вероятно, будет сразу же захвачена другим запущенным приложением.Тестеры в команде Windows просматривали различные популярные приложения, проверяя их, чтобы убедиться, что они работают нормально, но SimCity продолжал падать.Они сообщили об этом разработчикам Windows, которые разобрали SimCity, прошли через него в отладчике, нашли ошибку и добавили специальный код, который проверял, запущен ли SimCity, и, если это так, запускал распределитель памяти в специальном режиме, в котором выможет все еще использовать память после освобождения.
Это то, для чего предназначены совместимые прокладки.Вставьте устаревшее поведение.Стоит ли сообщать о другой версии Windows;сделать определенное поведение API другим способом;или отключите некоторые другие функции Windows, которые могут вызвать проблемы, такие как Aero.
Техническая информация о прокладках: здесь .
В инфраструктуре Shim реализована формаперехват интерфейса прикладного программирования (API).В частности, он использует природу связи для перенаправления вызовов API из самой Windows на альтернативный код - саму оболочку.Спецификация Windows Portable Executable (PE) и Common Object File Format (COFF) включает в себя несколько заголовков, а каталоги данных в этом заголовке обеспечивают уровень косвенности между приложением и связанным файлом.Вызовы внешних двоичных файлов осуществляются через таблицу адресов импорта (IAT).
Можно ли определить параметры режима совместимости в .NET?
Вопрос Программа работает в режиме совместимости , кажется, дает соответствующий ответ.