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

Манифест приложения (также известный как параллельный манифест приложения или манифест fusion ) — это XML-файл, описывающий и идентифицирующий общие и частные параллельные сборки, к которым приложение должно привязаться во время выполнения. Это должны быть те же версии сборок, что и использованные для проверки приложения. Манифесты приложений также могут описывать метаданные для файлов, которые являются частными для приложения.

Полный список XML-схемы см. в разделе "Схема файла манифеста".

Манифесты приложения имеют следующие элементы и атрибуты.

Элемент Атрибуты Обязательно
Сборки Да
manifestVersion Да
noInherit Нет
assemblyIdentity Да
type Да
name Да
language Нет
processorArchitecture Нет
version Да
Publickeytoken Нет
compatibility Нет
Приложения Нет
supportedOS Id Нет
maxversiontested Id Нет
Зависимостей Нет
dependentAssembly Нет
файл Нет
name Нет
hashalg Нет
hash Нет
activeCodePage Нет
autoElevate Нет
disableTheming Нет
disableWindowFiltering Нет
dpiAware Нет
dpiAwareness Нет
gdiScaling Нет
highResolutionScrollingAware Нет
longPathAware Нет
printerDriverIsolation Нет
ultraHighResolutionScrollingAware Нет
msix Нет
тип кучи Нет

Размещение файла

По возможности необходимо внедрить манифест приложения в качестве ресурса в файл приложения .exe или .dll. Если этого не удается сделать, вы можете поместить файл манифеста приложения в тот же каталог, что .exe и ..dll

Дополнительные сведения см. в разделе "Установка параллельных сборок".

Имя файла

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

Например, манифест приложения, который ссылается example.exe или example.dll должен использовать следующий синтаксис имени файла (если идентификатор ресурса равен 1, можно опустить < сегмент идентификатора> ресурса синтаксиса).

example.exe.<идентификатор> ресурса. Манифеста

example.dll.<идентификатор> ресурса. Манифеста

Элементы

Имена элементов и атрибутов чувствительны к регистру. Значения элементов и атрибутов не учитывают регистр, за исключением значения атрибута типа.

сборка

Элемент контейнера. Его первый подэлемент должен быть элементом noInherit или assemblyIdentity . Обязательный.

Элемент сборки должен находиться в пространстве имен urn:schemas-microsoft-com:asm.v1. Дочерние элементы сборки также должны находиться в этом пространстве имен путем наследования или путем добавления тегов.

Элемент сборки имеет следующие атрибуты.

attribute Описание
manifestVersion Атрибут manifestVersion должен иметь значение 1.0.

noInherit

Включите этот элемент в манифест приложения, чтобы задать контексты активации , созданные из манифеста, с флагом "нет наследования". Если этот флаг не задан в контексте активации, а контекст активации активен, он наследуется новыми потоками в том же процессе, окнах, процедурах окон и асинхронных вызовах процедур. Установка этого флага предотвращает наследование активного контекста новым объектом.

Элемент noInherit является необязательным и обычно опущен. Большинство сборок не работают правильно с использованием контекста активации без наследования, так как сборка должна быть явно разработана для управления распространением собственного контекста активации. Использование элемента noInherit требует, чтобы все зависимые сборки, на которые ссылается манифест приложения, имели элемент noInherit в манифесте сборки.

Если в манифесте используется noInherit , он должен быть первым вложенным элементом сборки . Элемент assemblyIdentity должен поступать сразу после элемента noInherit . Если параметр noInherit не используется, assemblyIdentity должен быть первым подэлементом элемента сборки . Элемент noInherit не содержит дочерних элементов. Недопустимый элемент в манифестах сборки.

assemblyIdentity

Как первый подэлемент элемента сборки, assemblyIdentity описывает и однозначно идентифицирует приложение, принадлежащее этому манифесту приложения. В качестве первого подэлемента зависимого элемента AssemblyIdentity описывает параллельную сборку, необходимую приложению. Обратите внимание, что для каждой сборки, на которую ссылается манифест приложения, требуется assemblyIdentity , которая точно соответствует assemblyIdentity в собственном манифесте сборки, на которую ссылается ссылка.

Элемент assemblyIdentity имеет следующие атрибуты. Он не имеет подэлементов.

attribute Описание
type Указывает тип приложения или сборки. Значение должно быть Win32 и все в нижнем регистре. Обязательный.
name Уникальное имя приложения или сборки. Используйте следующий формат для имени: Organization.Division.Name. Например, Корпорация Майкрософт. Windows.mysampleApp. Обязательный.
language Определяет язык приложения или сборки. Необязательный элемент. Если приложение или сборка зависят от языка, укажите код языка DHTML. В assemblyIdentity приложения, предназначенного для использования во всем мире (нейтральный язык), опустите атрибут языка.
В assemblyIdentity сборки, предназначенной для использования во всем мире (нейтрализуемого языка), задайте для языка значение "*".
processorArchitecture Указывает процессор. Допустимые значения: x86, amd64, arm и arm64. Необязательный элемент.
version Указывает версию приложения или сборки. Используйте формат четырехкомпонентной версии: mmmmm.nnnnn.rcoo.ppppp. Каждая из частей, разделенных точками, может составлять от 0 до 65535 включительно. Дополнительные сведения см. в разделе "Версии сборок". Обязательный.
Publickeytoken Шестнадцатеричная строка длиной 16 символов, представляющая последние 8 байт хэша SHA-1 открытого ключа, под которым подписывается приложение или сборка. Открытый ключ, используемый для подписи каталога, должен иметь значение 2048 бит или больше. Требуется для всех общих параллельных сборок.

совместимость

Содержит по крайней мере одно приложение. Он не имеет атрибутов. Необязательный элемент. Манифесты приложений без элемента совместимости по умолчанию Windows совместимость Vista в Windows 7.

application

Содержит по крайней мере один поддерживаемый элементOS . Начиная с Windows 10 версии 1903, он также может содержать один необязательный элемент maxversiontested. Он не имеет атрибутов. Необязательный элемент.

supportedOS

Поддерживаемый элементOS имеет следующий атрибут. Он не имеет подэлементов.

attribute Описание
Id Задайте для атрибута Id значение {e2011457-1546-43c5-a5fe-008deee3d3f0} для запуска приложения с помощью функций Vista. Это позволяет приложению, предназначенному для Windows Vista, работать в более поздней операционной системе.
Задайте для атрибута Id значение {35138b9a-5d96-4fbd-8e2d-a240225f93a}, чтобы запустить приложение с помощью Windows 7 функций.
Приложения, поддерживающие функции Windows Vista, Windows 7 и Windows 8, не требуют отдельных манифестов. В этом случае добавьте идентификаторы GUID для всех Windows операционных систем.
Сведения о поведении атрибута Id в Windows см. в Windows 8 и Windows Server 2012 книге по совместимости.
Следующие идентификаторы GUID соответствуют указанным операционным системам:
{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a} —> Windows 10, Windows 11, Windows Server 2016, Windows Server 2019 и Windows Server 2022
{1f676c76-80e1-4239-95bb-83d0f6d0da78} —> Windows 8.1 и Windows Server 2012 R2
{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} —> Windows 8 и Windows Server 2012
{35138b9a-5d96-4fbd-8e2d-a240225f93a} —> Windows 7 и Windows Server 2008 R2
{e2011457-1546-43c5-a5fe-008deee3d3f0} -> Windows Vista и Windows Server 2008
Это можно проверить на Windows 7 или Windows 8.x, запустив монитор ресурсов (resmon), перейдя на вкладку ЦП, щелкнув правой кнопкой мыши метки столбцов "Выбрать столбец...", и установите флажок "Контекст операционной системы". В Windows 8.x этот столбец также доступен в диспетчере задач (taskmgr). Содержимое столбца показывает наибольшее найденное значение или значение Windows Vista в качестве значения по умолчанию.

maxversiontested

Элемент maxversiontested указывает версии Windows, на которые было протестировано приложение, начиная с минимальной версии ОС, которую приложение поддерживает до максимальной версии. Полный набор версий можно найти здесь. Это предназначено для классических приложений, использующих XAML Islands и не развернутых в пакете MSIX. Этот элемент поддерживается в Windows 10 версии 1903 и более поздних версиях.

Элемент maxversiontested имеет следующий атрибут. Он не имеет подэлементов.

attribute Описание
Id Присвойте атрибуту Id значение 4-части строки версии, указывающей максимальную версию Windows, с которым было протестировано приложение. Например, "10.0.18226.0".

dependency

Содержит по крайней мере один зависимыйAssembly. Он не имеет атрибутов. Необязательный элемент.

dependentAssembly

Первым подэлементом зависимойAssembly должен быть элемент assemblyIdentity , описывающий параллельную сборку, необходимую приложению. Каждый зависимыйAssembly должен находиться в одной зависимости. Он не имеет атрибутов.

файл

Указывает файлы, которые являются частными для приложения. Необязательный элемент.

Элемент файла содержит атрибуты, показанные в следующей таблице.

attribute Описание
name Имя файла. Например, Comctl32.dll.
hashalg Алгоритм, используемый для создания хэша файла. Это значение должно быть SHA1.
hash Хэш файла, на который ссылается имя. Шестнадцатеричная строка длины в зависимости от хэш-алгоритма.

activeCodePage

В Windows 10 этот элемент заставляет процесс использовать UTF-8 в качестве кодовой страницы процесса. Дополнительные сведения см. в разделе "Использование кодовой страницы UTF-8". В Windows 10 единственным допустимым значением для activeCodePage является UTF-8.

Начиная с Windows 11 этот элемент также позволяет выбрать устаревшую кодовую страницу, отличной от UTF-8, или кодовые страницы для определенного языкового стандарта для совместимости устаревших приложений. Современные приложения настоятельно рекомендуется использовать Юникод. В Windows 11 параметр activeCodePage также может иметь значение Legacy или имя языкового стандарта, например en-US или ja-JP.

  • На компьютерах, настроенных для активной кодовой страницы UTF-8, устаревшая версия вернет процесс на кодовые страницы языкового стандарта системы. Если системный языковой стандарт не имеет определенных кодовых страниц, будет использоваться Windows-1252/437. Параметр устаревшей кодовой страницы поддерживается только в манифестах Fusion и только начиная с Windows 11.
  • При указании имени языкового стандарта, например en-US , кодовая страница процесса будет задана соответствующим образом для этой кодовой страницы языкового стандарта. Например, Windows-1252 и 437 для en-US или 932 для ja-JP.

Этот элемент был впервые добавлен в Windows 10 версии 1903 (обновление за май 2019 г.). Это свойство и целевое значение или запуск можно объявить в предыдущих сборках Windows, но необходимо обрабатывать обнаружение и преобразование устаревшей кодовой страницы обычным образом. Этот элемент не содержит атрибуты.

В следующем примере показано, как использовать этот элемент, чтобы заставить текущий процесс использовать UTF-8 в качестве кодовой страницы процесса.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
 ...
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings"> 
      <activeCodePage>UTF-8</activeCodePage> 
    </asmv3:windowsSettings>
  </asmv3:application>
 ...
</assembly>

autoElevate

Указывает, включено ли автоматическое повышение прав. Значение TRUE указывает, что она включена. Он не имеет атрибутов.

disableTheming

Указывает, отключается ли предоставление элементов пользовательского интерфейса теме. Значение TRUE указывает на отключение. Он не имеет атрибутов.

disableWindowFiltering

Указывает, следует ли отключить фильтрацию окон. Функция TRUE отключает фильтрацию окон, чтобы можно было перечислить иммерсивные окна с рабочего стола. disableWindowFiltering добавлен в Windows 8 и не имеет атрибутов.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
 ...
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2011/WindowsSettings">
      <disableWindowFiltering>true</disableWindowFiltering>
    </asmv3:windowsSettings>
  </asmv3:application>
 ...
</assembly>

dpiAware

Указывает, учитывается ли текущий процесс точками на дюйм.

Windows 10 версии 1607: элемент dpiAware игнорируется, если присутствует элемент dpiAwareness. Вы можете включить оба элемента в манифест, если вы хотите указать другое поведение для Windows 10 версии 1607, чем для более ранней версии операционной системы.

В следующей таблице описано поведение, которое приводит к поведению на основе наличия элемента dpiAware и содержащегося в нем текста. Текст в элементе не учитывает регистр.

Состояние элемента dpiAware Описание
Absent Текущий процесс не знает о dpi по умолчанию. Этот параметр можно изменить программным способом, вызвав функцию SetProcessDpiAwareness или SetProcessDPIAware .
Содержит значение true. Текущий процесс учитывается в системном dpi.
Содержит значение false. Windows Vista, Windows 7 и Windows 8: поведение аналогично тому, когда dpiAware отсутствует.
Windows 8.1 и Windows 10: текущий процесс не знает о dpi, и вы не можете программно изменить этот параметр, вызвав функцию SetProcessDpiAwareness или SetProcessDPIAware.
Содержит значение true/pm. Windows Vista, Windows 7 и Windows 8: текущий процесс учитывает dpi системы.
Windows 8.1 и Windows 10: текущий процесс учитывает dpi для каждого монитора.
Содержит "на монитор" Windows Vista, Windows 7 и Windows 8: поведение аналогично тому, когда dpiAware отсутствует.
Windows 8.1 и Windows 10: текущий процесс учитывает dpi для каждого монитора.
Содержит любую другую строку. Windows Vista, Windows 7 и Windows 8: поведение аналогично тому, когда dpiAware отсутствует.
Windows 8.1 и Windows 10: текущий процесс не знает о dpi, и вы не можете программно изменить этот параметр, вызвав функцию SetProcessDpiAwareness или SetProcessDPIAware.

Дополнительные сведения о параметрах осведомленности о dpi см. в разделе "Сравнение уровней осведомленности о DPI".

DpiAware не имеет атрибутов.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
 ...
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
 ...
</assembly>

dpiAwareness

Указывает, учитывается ли текущий процесс точками на дюйм.

Минимальная версия операционной системы, поддерживающей элемент dpiAwareness, — Windows 10 версии 1607. Для версий, поддерживающих элемент dpiAwareness , dpiAwareness переопределяет элемент dpiAware . Вы можете включить оба элемента в манифест, если вы хотите указать другое поведение для Windows 10 версии 1607, чем для более ранней версии операционной системы.

Элемент dpiAwareness может содержать один элемент или список разделенных запятыми элементов. В последнем случае используется первый (левый) элемент в списке, распознаваемый операционной системой. Таким образом, можно указать различные варианты поведения, поддерживаемые в будущих версиях операционной системы Windows.

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

Состояние элемента dpiAwareness: Описание
Элемент отсутствует Элемент dpiAware указывает, учитывается ли процесс на дюйм.
Содержит не распознанные элементы Текущий процесс не знает о dpi по умолчанию. Этот параметр можно изменить программным способом, вызвав функцию SetProcessDpiAwareness или SetProcessDPIAware .
Первый распознанный элемент — "система" Текущий процесс учитывается в системном dpi.
Первый распознанный элемент — "permonitor" Текущий процесс учитывается для каждого монитора на дюйм.
Первый распознанный элемент — permonitorv2 Текущий процесс использует контекст осведомленности о dpi для каждого монитора версии 2. Этот элемент будет распознана только в Windows 10 версии 1703 или более поздней.
Первый распознанный элемент "не знает" Текущий процесс не знает о dpi. Этот параметрнельзя изменить программным способом, вызвав функцию SetProcessDpiAwareness или SetProcessDPIAware .

Дополнительные сведения о параметрах осведомленности о dpi, поддерживаемых этим элементом, см. в DPI_AWARENESS и DPI_AWARENESS_CONTEXT.

dpiAwareness не имеет атрибутов.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
 ...
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
      <dpiAwareness>PerMonitorV2, unaware</dpiAwareness>
    </asmv3:windowsSettings>
  </asmv3:application>
 ...
</assembly>

gdiScaling

Указывает, включено ли масштабирование GDI. Минимальная версия операционной системы, поддерживающей элемент gdiScaling, — это Windows 10 версии 1703.

Платформа GDI (интерфейс графического устройства) может применять масштабирование DPI к примитивам и тексту на основе каждого монитора без обновления самого приложения. Это может быть полезно для приложений GDI, которые больше не обновляются.

Не векторные рисунки (например, растровые рисунки, значки или панели инструментов) нельзя масштабировать с помощью этого элемента. Кроме того, изображения и текст, отображаемые в растровых изображениях, динамически создаваемых приложениями, также не могут масштабироваться этим элементом.

ЗНАЧЕНИЕ TRUE указывает, что этот элемент включен. Он не имеет атрибутов.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
 ...
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">
      <gdiScaling>true</gdiScaling>
    </asmv3:windowsSettings>
  </asmv3:application>
 ...
</assembly>

highResolutionScrollingAware

Указывает, включена ли поддержка прокрутки с высоким разрешением. Значение TRUE указывает, что она включена. Он не имеет атрибутов.

longPathAware

Включает длинные пути, превышающие длину MAX_PATH . Этот элемент поддерживается в Windows 10 версии 1607 и более поздних версий. Дополнительные сведения см. в этой статье.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
 ...
  <asmv3:application>
    <asmv3:windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
      <ws2:longPathAware>true</ws2:longPathAware>
    </asmv3:windowsSettings>
  </asmv3:application>
 ...
</assembly>

printerDriverIsolation

Указывает, включена ли изоляция драйвера принтера. Значение TRUE указывает, что она включена. Он не имеет атрибутов. Изоляция драйвера принтера повышает надежность службы печати Windows, позволяя драйверам принтера выполняться в процессах, которые отделены от процесса, в котором выполняется средство печати. Поддержка изоляции драйвера принтера началась в Windows 7 и Windows Server 2008 R2. Приложение может объявить изоляцию драйвера принтера в манифесте приложения, чтобы изолировать себя от драйвера принтера и повысить его надежность. То есть приложение не аварийно завершает работу, если драйвер принтера имеет ошибку.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
 ...
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2011/WindowsSettings">
      <printerDriverIsolation>true</printerDriverIsolation>
    </asmv3:windowsSettings>
  </asmv3:application>
 ...
</assembly>

ultraHighResolutionScrollingAware

Указывает, включена ли поддержка прокрутки ультра-высокого разрешения. Значение TRUE указывает, что она включена. Он не имеет атрибутов.

msix

Указывает сведения об удостоверении разреженного пакета MSIX для текущего приложения. Этот элемент поддерживается в Windows 10 версии 2004 и более поздних версиях.

Элемент msix должен находиться в пространстве имен urn:schemas-microsoft-com:msix.v1. Он содержит атрибуты, показанные в следующей таблице.

attribute Описание
publisher Описание сведений об издателе. Это значение должно соответствовать атрибуту Publisher в элементе Identity в манифесте разреженного пакета.
PackageName Описывает содержимое пакета. Это значение должно соответствовать атрибуту Name в элементе Identity в манифесте разреженного пакета.
applicationId Уникальный идентификатор приложения. Это значение должно соответствовать атрибуту Id в элементе Application в манифесте разреженного пакета.
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="Contoso.PhotoStoreApp"/>
  <msix xmlns="urn:schemas-microsoft-com:msix.v1"
          publisher="CN=Contoso"
          packageName="ContosoPhotoStore"
          applicationId="ContosoPhotoStore"
        />
</assembly>

тип кучи

Переопределяет реализацию кучи по умолчанию для используемых API кучи Win32 .

  • Значение SegmentHeap указывает, что будет использоваться куча сегментов. Куча сегментов — это современная реализация кучи, которая обычно сокращает общее использование памяти. Этот элемент поддерживается в Windows 10 версии 2004 (сборка 19041) и более поздних версий.
  • Все остальные значения не учитываются.

Этот элемент не содержит атрибуты.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
 ...
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2020/WindowsSettings">
      <heapType>SegmentHeap</heapType>
    </asmv3:windowsSettings>
  </asmv3:application>
 ...
</assembly>

Пример

Ниже приведен пример манифеста приложения с именем MySampleApp.exe. Приложение использует сборку SampleAssembly параллельно.

<?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> 
        <!--This Id value indicates the application supports Windows Vista functionality -->
          <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        <!--This Id value indicates the application supports Windows 7 functionality-->
          <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        <!--This Id value indicates the application supports Windows 8 functionality-->
          <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        <!--This Id value indicates the application supports Windows 8.1 functionality-->
          <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      </application> 
  </compatibility>

  <assemblyIdentity type="win32" 
                    name="myOrganization.myDivision.mySampleApp" 
                    version="6.0.0.0" 
                    processorArchitecture="x86" 
                    publicKeyToken="0000000000000000"
  />
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" 
                        name="Proseware.Research.SampleAssembly" 
                        version="6.0.0.0" 
                        processorArchitecture="X86" 
                        publicKeyToken="0000000000000000" 
                        language="*"
      />
    </dependentAssembly>
  </dependency>
</assembly>