Манифест приложения (исполняемый файл)

Платформы

Клиентысерверы Windows 8 — Windows Server 2012

Описание

Раздел совместимости манифеста приложения (исполняемого файла), представленный в Windows, помогает операционной системе определить версии Windows, предназначенные для целевого приложения. Кроме того, манифест приложения позволяет Windows обеспечить поведение, ожидаемое приложением в зависимости от версии Windows, на которую нацелено приложение.

Раздел совместимости манифеста позволяет Windows предоставлять новое поведение только что созданному программному обеспечению при сохранении совместимости для существующего программного обеспечения. Этот раздел поможет Windows обеспечить более высокую совместимость в будущих версиях Windows. Например, приложение, объявляющее поддержку только Windows 8 в разделе совместимости, будет продолжать получать Windows 8 поведение в будущих версиях Windows.

Проявление

Приложения без раздела совместимости в манифесте будут иметь поведение Windows Vista по умолчанию в Windows 7 и Windows 8 и будущих версиях Windows. Имейте в виду, что Windows XP и Windows Vista игнорируют этот раздел манифеста и не влияет на них.

Эти компоненты Windows обеспечивают дивергентное поведение на основе раздела совместимости:

Пул потоков удаленного вызова процедур (RPC) по умолчанию

  • Windows 8 и Windows 7. Чтобы повысить масштабируемость и уменьшить количество потоков, RPC переключился в пул потоков NT (пул по умолчанию). Для Windows Vista RPC использовал пул частных потоков:

    • Для двоичных файлов, скомпилированных для Windows 7 и более поздних версий Windows, используется пул по умолчанию.
    • Если I_RpcMgmtEnableDedicatedThreadPool вызывается до вызова API RPC, используется пул частных потоков (поведение Vista).
    • Если I_RpcMgmtEnableDedicatedThreadPool вызывается после вызова RPC, используется пул по умолчанию, I_RpcMgmtEnableDedicatedThreadPool возвращает ошибку 1764, а запрошенная операция не поддерживается.
  • Windows Vista (по умолчанию): для двоичных файлов, скомпилированных для Windows Vista и более ранних версий Windows, используется частный пул.

Блокировка DirectDraw

  • Windows 8 и Windows 7. Приложения, манифестированные для Windows 7 и более поздних версий операционной системы, не могут вызывать API блокировки в DDRAW для блокировки основного буфера видеофайла. Это приведет к ошибке, и возвращается указатель NULL для основного. Это поведение применяется, даже если композиция диспетчера окон рабочего стола не включена. Приложения с совместимостью, объявленной для Windows 7 и более поздних версий, не должны блокировать основной буфер видео для отрисовки.
  • Windows Vista (по умолчанию): приложения могут получить блокировку основного буфера видео, так как устаревшие приложения зависят от этого поведения; Запуск приложения отключает диспетчер окон рабочего стола.

Передача битового блока DirectDraw (bitblt) в основной без окна обрезки

  • Windows 8 и Windows 7. Приложения, манифестированные для Windows 7 и более поздних версий Windows, не могут выполнять bitblt в основной буфер видео на рабочем столе без окна вырезки. Это приводит к ошибке, и область bitblt не будет отображаться. Windows применяет это поведение, даже если вы не включаете состав диспетчера окон рабочего стола. Приложения с совместимостью, объявленной для Windows 7 и более поздних версий, должны выполнять bitblt в окно вырезки.
  • Windows Vista (по умолчанию): приложения должны иметь возможность выполнить bitblt в основной без окна вырезки, так как устаревшие приложения зависят от этого поведения; При запуске этого приложения отключается диспетчер окон рабочего стола.

GetOverlappedResult API

  • Windows 8 и Windows 7. Разрешает состояние гонки, в котором многопоточное приложение с помощью GetOverlappedResult может вернуться без сброса события в перекрывающейся структуре, что приводит к преждевременному возвращению следующего вызова этой функции.
  • Windows Vista (по умолчанию): обеспечивает поведение с условием гонки, от которых приложения могут зависеть. Приложения, которые должны избегать этой гонки до поведения Windows 7, должны ждать перекрывающегося события и при сигнале вызова GetOverlappedResult с bWait == FALSE.

Состояние тем оболочки в режиме высокой контрастности

  • Windows 8. Возвращает реальное состояние тем, когда в режиме высокой контрастности.
  • Windows 7. Возвращает тема как недоступные в режиме высокой контрастности, так как DWM по-прежнему включен.
  • Windows Vista (по умолчанию): возвращает тема как недоступные в режиме высокой контрастности, так как DWM по-прежнему включен.

Метод Shell iPersistFile::Save

  • Windows 8: CShellLink::Save теперь определяет, вызывается ли обработчик IPersistFile с относительным аргументом пути и завершается сбоем вызова, если это так.

    Общедоступная документация, описывающая это поведение, указывает, что аргумент пути должен быть абсолютным путем:

  • Windows 7 и более ранних версий (по умолчанию): CShellLink::Save не определяет, отправляет ли обработчик iPersistFile относительный путь и позволяет приложениям продолжать работу с абсолютными или относительными путями.

Помощник по совместимости программ (PCA)

  • Windows 8. Приложения с разделом совместимости не получают устранение рисков PCA.
  • Windows 7. Приложения с разделом совместимости отслеживаются на наличие потенциальных проблем совместимости для Windows 8 изменений (описанных в этом документе).
  • 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-a240225f93a}

    для Windows 7. Приложения, устанавливающие это значение в манифесте приложения, получают поведение Windows 7

  • {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}

    для Windows 8. Приложения, задали это значение в манифесте приложения, получают поведение Windows 8

Корпорация Майкрософт будет создавать и публиковать идентификаторы GUID для будущих версий Windows по мере необходимости.

Пример XML обновленного манифеста:

Примечание

Имена атрибутов и тегов в манифесте приложения чувствительны к регистру.

<?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 app support for Windows Vista -->
        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        <!--The ID below indicates app support for Windows 7 -->
        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        <!--The ID below indicates app support for Windows 8 -->
        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application> 
</compatibility>
</assembly>

Идентификаторы GUID для всех операционных систем в предыдущем примере обеспечивают поддержку нижнего уровня. Приложения, поддерживающие несколько платформ, не нуждаются в отдельных манифестах для каждой платформы.

Тесты

Приложение может указать несколько поддерживаемых идентификаторов операционной системы. Следует добавить поддерживаемый идентификатор операционной системы, если вы тестировали или находитесь в процессе тестирования, приложение в этой операционной системе. Windows Vista и предыдущие версии операционной системы не обращают внимания на эти записи. Начиная с Windows 7, Windows выберет в манифесте guid самой высокой версии до работающей версии Windows и предоставит поддержку приложений на этом уровне. Чтобы убедиться, что приложение работает с новым разделом совместимости манифеста приложения, выполните следующие действия.

  1. Протестируйте приложение с помощью нового раздела совместимости и идентификатора SupportedOS = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}, чтобы убедиться, что приложение работает правильно, используя последнее поведение Windows 8.
  2. Протестируйте приложение с помощью нового раздела совместимости и идентификатора SupportedOS = {35138b9a-5d96-4fbd-8e2d-a240225f93a}, чтобы убедиться, что приложение работает правильно с помощью поведения Windows 7.
  3. Протестируйте приложение с помощью нового раздела совместимости и идентификатора SupportedOS = {e2011457-1546-43c5-a5fe-008deee3d3f0}, чтобы убедиться, что приложение работает правильно с помощью поведения Windows Vista.

Ресурсы