Поделиться через


Манифест приложения

Затронутые платформы

Клиенты — 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 для обеих операционных систем в приведенном выше примере заключается в предоставлении поддержки нижнего уровня. Приложениям, поддерживающим обе платформы, не потребуются отдельные манифесты для каждой платформы.

Тестирование совместимости, производительности, надежности и удобства использования

  1. Протестируйте приложение с помощью нового раздела совместимости и SupportedOS ID ={35138b9a-5d96-4fbd-8e2d-a2440225f93a} убедитесь, что приложение работает правильно, используя последнее поведение Windows 7.
  2. Протестируйте приложение с помощью нового раздела совместимости и 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, игнорируются для получения дополнительных сведений.