Манифест приложения
Затронутые платформы
Клиенты — Windows 7
Серверы — Windows Server 2008 R2
Влияние на функции
Уровень серьезности — низкий
Частота — низкая
Описание
В Windows 7 представлен новый раздел манифеста приложения под названием "Совместимость". Этот раздел помогает Windows определить версии Windows, предназначенные для приложения, и позволяет Windows обеспечить поведение, ожидаемое приложением в зависимости от версии Windows, предназначенной для приложения.
Раздел Совместимость позволяет Windows предоставлять новое поведение для нового программного обеспечения, созданного разработчиком, сохраняя при этом совместимость с существующим программным обеспечением. Этот раздел также помогает Windows обеспечить более высокую совместимость и в будущих версиях Windows. Например, приложение, объявляющее поддержку только для Windows 7 в разделе Совместимость, будет по-прежнему получать поведение Windows 7 в будущих версиях Windows.
Проявление изменений
Приложения без раздела "Совместимость" в манифесте будут по умолчанию получать поведение Windows Vista в Windows 7 и будущих версиях Windows. Обратите внимание, что Windows XP и Windows Vista игнорируют этот раздел манифеста и не влияют на них.
Следующие компоненты Windows обеспечивают разное поведение на основе раздела Совместимость в Windows 7:
Пул потоков RPC по умолчанию
-
Windows 7: Чтобы улучшить масштабируемость и уменьшить количество потоков, RPC переключился на пул потоков NT (пул по умолчанию). Для Windows Vista RPC использует частный пул потоков.
- Для двоичных файлов, скомпилированных для Win7, используется пул по умолчанию.
- Если I_RpcMgmtEnableDedicatedThreadPool вызывается перед вызовом API RPC, используется пул частных потоков (поведение Vista).
- Если I_RpcMgmtEnableDedicatedThreadPool вызывается после вызова RPC, используется пул по умолчанию, I_RpcMgmtEnableDedicatedThreadPool возвращает ошибку 1764, а запрошенная операция не поддерживается.
- Windows Vista (по умолчанию): Для двоичных файлов, скомпилированных для Windows Vista и ниже, используется частный пул.
Блокировка DirectDraw
- Windows 7: Приложения, манифестированные для Windows 7, не могут вызывать API блокировки в DDRAW для блокировки основного видео буфера рабочего стола. Это приведет к ошибке, и будет возвращен указатель NULL для основного экземпляра. Это поведение применяется, даже если композиция диспетчера окон рабочего стола не включена. Приложения, совместимые с Windows 7, не должны блокировать основной буфер видео для отрисовки.
- Windows Vista (по умолчанию): Приложения смогут получить блокировку основного буфера видео, так как устаревшие приложения зависят от этого поведения. Запуск приложения отключает диспетчер окон рабочего стола.
Передача битового блока DirectDraw (Blt) в основной без обрезки окна
- Windows 7: Приложения, манифестированные для Windows 7, не могут выполнять Blt в основном буфере видео на рабочем столе без обрезки окна. Это приведет к ошибке, и область Blt не будет отображена. Windows применяет это поведение, даже если не включить композицию диспетчера окон рабочего стола. Приложения, совместимые с Windows 7, должны быть blt в окне обрезки.
- Windows Vista (по умолчанию): Приложения должны иметь возможность blt to the primary без окна обрезки, так как устаревшие приложения зависят от этого поведения. Запуск этого приложения отключает диспетчер окон рабочего стола.
GetOverlappedResult API
- Windows 7: Устраняет состояние гонки, при котором многопоточное приложение с помощью GetOverlappedResult может вернуться без сброса события в перекрывающейся структуре, что приводит к преждевременному возврату следующего вызова этой функции.
- Windows Vista (по умолчанию): Предоставляет поведение с состоянием гонки, от которых могут зависеть приложения. Приложения, желающие избежать этой гонки до поведения Windows 7, должны ждать перекрывающегося события и при получении сигнала вызывать GetOverlappedResult с bWait == FALSE.
Помощник по совместимости программ (PCA)
- Windows 7: В разделе "Приложения с совместимостью" не будет меры по устранению рисков PCA.
- Windows Vista (по умолчанию): Приложения, которые при определенных обстоятельствах не могут установиться должным образом или завершаются сбоем во время выполнения, получат устранение рисков PCA. Дополнительные сведения см. в справочном разделе.
Использование возможностей функций
Обновите манифест приложения, указав последние сведения о совместимости для поддержки операционной системы. В этом разделе описываются дополнения к манифесту:
Пространства имен: Compatibility.v1 (xmlns="urn:schemas-microsoft-com:compatibility.v1">)
Имя раздела: Совместимость (новый раздел)
SupportedOS: GUID поддерживаемой операционной системы. Идентификаторы GUID, которые сопоставляются с поддерживаемыми операционными системами:
- {e2011457-1546-43c5-a5fe-008deee3d3f0} для Windows Vista: это значение по умолчанию для контекста переключения.
- {35138b9a-5d96-4fbd-8e2d-a2440225f93a} для Windows 7. Приложения, задающие это значение в манифесте приложения, получают поведение Windows 7.
Примечание
Корпорация Майкрософт будет создавать и публиковать идентификаторы GUID для будущих версий Windows по мере необходимости.
Ниже приведен пример обновленного манифеста.
Примечание
Имена атрибутов и тегов в манифесте приложения чувствительны к регистру.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--The ID below indicates application support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>
Добавление идентификаторов GUID для обеих операционных систем в приведенном выше примере заключается в предоставлении поддержки нижнего уровня. Приложениям, поддерживающим обе платформы, не потребуются отдельные манифесты для каждой платформы.
Тестирование совместимости, производительности, надежности и удобства использования
- Протестируйте приложение с помощью нового раздела совместимости и
SupportedOS ID ={35138b9a-5d96-4fbd-8e2d-a2440225f93a}
убедитесь, что приложение работает правильно, используя последнее поведение Windows 7. - Протестируйте приложение с помощью нового раздела совместимости и
SupportedOS ID ={e2011457-1546-43c5-a5fe-008deee3d3f0}
(или полностью без этого раздела), чтобы убедиться, что приложение работает правильно, используя поведение Windows Vista в Windows 7.
Известные проблемы
Несоответствие контекста Приложение выполняется в контексте Windows Vista, а не в контексте Windows 7 на компьютере под управлением 64-разрядных версий Windows 7 или Windows Server 2008 R2.
Решения Обновления доступны для исправления всех поддерживаемых 64-разрядных версий Windows 7 и Windows Server 2008 R2, а также для всех поддерживаемых версий Windows Server 2008 R2 на базе Itanium. Перейдите на страницу служба поддержки Майкрософт базы знаний 978637: приложение выполняется в контексте Windows Vista, а не в контексте Windows 7 на компьютере под управлением 64-разрядных версий Windows 7 или Windows Server 2008 R2, чтобы получить дополнительные сведения и скачать правильную версию системы.
Диагностика аварийного дампа заблокирована
Решение Перейдите на страницу служба поддержки Майкрософт базы знаний 976038. Исключения, создаваемые приложением, работающим в 64-разрядной версии Windows, игнорируются для получения дополнительных сведений.
Ссылки на другие ресурсы
- Функция QueryActCtxW
- Манифест UAC
- Манифесты приложений для приложений Windows
- Диспетчер окон рабочего стола (DWM)
- Обновление несоответствия контекста