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


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

Платформ

клиенты — 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 и более поздних версий, используется пул по умолчанию.
    • Если 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 не будет отображаться. Windows применяет это поведение, даже если вы не включите состав диспетчера окон рабочего стола. Приложения с совместимостью, объявленной для Windows 7 и более поздних версий, должны выполнять битблт в окно вырезки.
  • Windows Vista (по умолчанию): приложения должны иметь возможность выполнить bitblt к основному окну без вырезки, так как устаревшие приложения зависят от этого поведения; При запуске этого приложения отключается диспетчер окон рабочего стола.

API GetOverlappedResult

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

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

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

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

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

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

    для 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, Windows выберет самый высокий guid версии в манифесте до работающей версии Windows и предоставит поддержку приложений на этом уровне. Чтобы убедиться, что приложение работает с новым разделом совместимости манифеста приложения:

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

Ресурсы