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


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

Платформы

Клиенты — 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 по-прежнему включен.

Метод iPersistFile::Save оболочки

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

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

  • 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">)

Имя раздела: Совместимость (новый раздел)

ПоддерживаемаяOS: GUID поддерживаемой операционной системы. Идентификаторы GUID, которые сопоставляются с поддерживаемыми операционными системами:

  • {e2011457-1546-43c5-a5fe-008deee3d3f0}

    для Windows Vista: это значение по умолчанию для контекста переключения.

  • {35138b9a-5d96-4fbd-8e2d-a2440225f93a}

    для 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-a2440225f93a}, чтобы убедиться, что приложение работает правильно, используя поведение Windows 7.
  3. Протестируйте приложение с новым разделом совместимости и идентификатором SupportedOS = {e2011457-1546-43c5-a5fe-008deee3d3f0}, чтобы убедиться, что приложение работает правильно, используя поведение Windows Vista.

Ресурсы