应用程序清单 (也称为并行应用程序清单,或 融合 清单) 是一个 XML 文件,用于描述和标识应用程序在运行时应绑定到的共享程序集和专用并行程序集。 这些程序集的版本应与测试应用程序时使用的程序集版本相同。 应用程序清单还可能描述应用程序的专用文件的元数据。

有关 XML 架构的完整列表,请参阅 清单文件架构

应用程序清单具有以下元素和属性。

如果可能,应将应用程序清单作为资源嵌入到应用程序的 .exe 文件或 .dll 中。 如果无法执行此操作,则可以将应用程序清单文件放置在 与 或 .dll 相同的目录中 .exe

有关详细信息,请参阅 安装并行程序集

按照约定,应用程序清单应与应用的可执行文件同名,并 .manifest 附加扩展名。

例如,引用 example.exe example.dll 的应用程序清单应使用以下文件名语法 (如果 资源 ID 为 1,则可以省略<语法) 的资源 ID > 段。

example.exe。< 资源 ID >。清单

example.dll。< 资源 ID >。清单

元素和属性的名称区分大小写。 元素和特性的值不区分大小写,类型特性的值除外。

程序集 (assembly)

容器元素。 其第一个子元素必须是 noInherit assemblyIdentity 元素。 必需。

程序集 元素必须位于命名空间 urn:schemas-microsoft-com:asm.v1 中。 程序集的子元素也必须通过继承或标记位于此命名空间中。

assembly 元素具有以下属性。

Attribute

noInherit

将此元素包含在应用程序清单中,以设置使用“no inherit”标志从清单生成的 激活上下文 。 如果未在激活上下文中设置此标志,并且激活上下文处于活动状态,它将由同一进程、窗口、窗口过程和 异步过程调用 中的新线程继承。 设置此标志可防止新对象继承活动上下文。

noInherit 元素是可选的,通常省略。 大多数程序集使用非继承激活上下文无法正常工作,因为程序集必须显式设计为管理其自己的激活上下文的传播。 使用 noInherit 元素要求应用程序清单引用的任何依赖程序集在其 程序集清单 中具有 noInherit 元素。

如果在清单中使用 noInherit ,则它必须是 程序集 元素的第一个子元素。 assemblyIdentity 元素应紧跟 在 noInherit 元素之后。 如果未使用 noInherit 则 assemblyIdentity 必须是 assembly 元素的第一个子元素。 noInherit 元素没有子元素。 它不是 程序集清单 中的有效元素。

assemblyIdentity

作为 程序集 元素的第一个子元素, assemblyIdentity 描述并唯一标识拥有此应用程序清单的应用程序。 作为 dependentAssembly 元素的第一个子元素, assemblyIdentity 描述应用程序所需的并行程序集。 请注意,应用程序清单中引用的每个程序集 都需要与引用 程序集自己的程序集清单中的 assemblyIdentity 完全匹配的 assemblyIdentity

assemblyIdentity 元素具有以下属性。 它没有子元素。

Attribute 唯一命名应用程序或程序集。 使用以下格式命名: Organization.Division.Name 。 例如, Microsoft.Windows.mysampleApp 。 必需。 language 标识应用程序或程序集的语言。 如果应用程序或程序集特定于语言,请指定 DHTML 语言代码。 在面向全球使用的应用程序的 assemblyIdentity 中, (非特定语言) 省略语言属性。
在用于全球使用的程序集的 assemblyIdentity 中, (非特定语言) 将语言的值设置为 \* 。 可选。 processorArchitecture 指定处理器。 有效值包括 x86 amd64 arm arm64 。 还可以指定 \* ,这可确保所有平台都成为目标平台。 可选。 version 指定应用程序或程序集版本。 使用由四部分构成的版本格式: mmmmm.nnnnn.ooooo.ppppp 。 由句点分隔的每个部分可以是 0-65535(含 0-65535)。 有关详细信息,请参阅 程序集版本 。 必需。 publicKeyToken 一个 16 个字符的十六进制字符串,表示对应用程序或程序集进行签名时公钥的 SHA-1 哈希的最后 8 个字节。 用于对目录进行签名的公钥必须为 2048 位或更大。 对于所有共享的并行程序集是必需的。

application

至少包含一个 受支持的OS 元素。 从 Windows 10 版本 1903 开始,它还可以包含一个可选的 maxversiontested 元素。 它没有属性。 可选。

supportedOS

supportedOS 元素具有以下属性。 它没有子元素。

Attribute 将 Id 属性设置为 {e2011457-1546-43c5-a5fe-008deee3d3f0} 以使用 Vista 功能运行应用程序。 这可以让专为 Windows Vista 设计的应用程序在以后的操作系统上运行。
将 Id 属性设置为 {35138b9a-5d96-4fbd-8e2d-a2440225f93a} 以使用 Windows 7 功能运行应用程序。
支持 Windows Vista、Windows 7 和 Windows 8 功能的应用程序不需要单独的清单。 在这种情况下,请为所有 Windows 操作系统添加 GUID。
有关 Windows 中的 Id 属性行为的信息,请参阅 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-a2440225f93a} -> Windows 7 和 Windows Server 2008 R2
{e2011457-1546-43c5-a5fe-008deee3d3f0} -> Windows Vista 和 Windows Server 2008
可以在 Windows 7 或 Windows 8.x 上对此进行测试,方法是运行资源监视器 (resmon) ,转到“CPU”选项卡,右键单击列标签“选择列...”,然后检查“操作系统上下文”。 在 Windows 8.x 上,还可以在任务管理器 (taskmgr) 中找到此列。 列的内容显示找到的最高值,或“Windows Vista”作为默认值。

maxversiontested

maxversiontested 元素指定从应用程序支持的最低操作系统版本到最高版本开始测试应用程序的 Windows 版本。 可 在此处 找到完整的版本集。 它旨在由使用 XAML 岛 且未部署在 MSIX 包中的桌面应用程序使用。 Windows 10版本 1903 及更高版本中支持此元素。

maxversiontested 元素具有以下属性。 它没有子元素。

Attribute

dependentAssembly

dependentAssembly 的第一个子元素必须是 assemblyIdentity 元素,用于描述应用程序所需的并行程序集。 每个 dependentAssembly 必须正好位于一个 依赖项 内。 它没有属性。

指定专用于应用程序的文件。 可选。

file 元素具有下表所示的属性。

Attribute

activeCodePage

在Windows 10,此元素强制进程使用 UTF-8 作为进程代码页。 有关详细信息,请参阅 使用 UTF-8 代码页 。 在 Windows 10, activeCodePage 的唯一有效值为 UTF-8

从 Windows 11 开始,此元素还允许选择旧的非 UTF-8 代码页,或用于特定区域设置的代码页,以便实现旧应用程序兼容性。 强烈建议新式应用程序使用 Unicode。 在Windows 11, activeCodePage 还可以设置为旧 值或区域设置名称(如 en-US ja-JP )。

  • 在配置为 UTF-8 系统活动代码页的计算机上, 旧版 会将该过程还原到系统区域设置代码页。 如果系统区域设置没有定义的代码页,则将使用 Windows-1252/437。 旧代码 页设置仅在 Fusion 清单中受支持,并且仅从Windows 11开始。
  • 当提供区域设置名称(如 en-US )时,将为该区域设置代码页相应地设置进程代码页。 例如,Windows-1252 和 437(适用于 en-US)或 932(适用于 ja-JP)。
  • 此元素在 2019 年 5 月更新) (Windows 10版本 1903 中首次添加。 你可以声明此属性,并以早期 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 表示已启用它。 它没有属性。 可执行文件必须由 Windows 发布服务器进行数字签名。 供内部使用。

    disableTheming

    指定是否禁用为 UI 元素提供主题。 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

    指定当前进程是否为每英寸点数 (dpi) 感知。

    Windows 10版本 1607:如果存在 dpiAwareness 元素,则忽略 dpiAware 元素。 如果要为 Windows 10 版本 1607 指定与早期版本的操作系统不同的行为,则可以在清单中包含这两个元素。

    下表描述了基于 dpiAware 元素的存在及其包含的文本导致的行为。 元素中的文本不区分大小写。

    dpiAware 元素的状态 包含“false” Windows Vista、Windows 7 和 Windows 8:该行为与 dpiAware 不存在时的行为相同。
    Windows 8.1和Windows 10:当前进程没有 dpi 感知,并且无法通过调用 SetProcessDpiAwarenessSetProcessDPIAware 函数以编程方式更改此设置。
    包含“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 感知,并且无法通过调用 SetProcessDpiAwarenessSetProcessDPIAware 函数以编程方式更改此设置。

    有关 dpi 感知设置的详细信息,请参阅 Windows 上的高 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

    指定当前进程是否为每英寸点数 (dpi) 感知。

    支持 dpiAwareness 元素的操作系统的最低版本为 Windows 10 版本 1607。 对于支持 dpiAwareness 元素的版本, dpiAwareness 将替代 dpiAware 元素。 如果要为 Windows 10 版本 1607 指定与早期版本的操作系统不同的行为,则可以在清单中包含这两个元素。

    dpiAwareness 元素可以包含单个项或逗号分隔项的列表。 在后一种情况下,使用操作系统识别的列表中的第一个 (最左侧) 项。 通过这种方式,可以指定将来的 Windows 操作系统版本支持的不同行为。

    下表描述了基于 dpiAwareness 元素的存在及其包含在其最左侧识别项中的文本所导致的行为。 元素中的文本不区分大小写。

    dpiAwareness 元素状态: 不包含已识别的项 默认情况下,当前进程不识别 dpi。 可以通过调用 SetProcessDpiAwarenessSetProcessDPIAware 函数以编程方式更改此设置。 第一个识别项是“系统” 当前进程是系统 dpi 感知的。 第一个识别的项是“permonitor” 当前进程是按监视器 dpi 感知的。 第一个识别项为“permonitorv2” 当前进程使用 per-monitor-v2 dpi 感知上下文。 仅在Windows 10版本 1703 或更高版本上才能识别此项。 第一个识别的项是“不知道” 当前进程未识别 dpi。 不能通过调用 SetProcessDpiAwarenessSetProcessDPIAware 函数以编程方式更改此设置。

    有关此元素支持的 dpi 感知设置的详细信息,请参阅 DPI_AWARENESSDPI_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 表示已启用它。 它没有属性。

    为当前应用程序指定具有外部位置的包的标识信息 (请参阅 使用外部位置打包) 授予包标识 。 Windows 10 版本 2004 及更高版本中支持此元素。

    msix 元素必须位于命名空间 urn:schemas-microsoft-com:msix.v1中。 它具有下表所示的属性。

    Attribute
    <?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>
    

    heapType

    替代 Win32 堆 API 要使用的默认堆实现。

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

    trustInfo

    所有符合 UAC 的应用都应将请求的执行级别添加到应用程序清单。 请求的执行级别指定应用所需的权限。 有关详细信息,请参阅 用户帐户控制 (UAC) 如何影响应用程序

    请求的执行级别是使用 trustInfo 元素的 requestedExecutionLevel 后代的 level 属性指定的。 允许的级别值为:

    将级别设置为“highestAvailable”可确保应用程序在管理员组成员和不是管理员组成员的用户中成功运行。 如果应用程序只能使用对系统的管理访问权限运行,则使用请求的执行级别“requireAdministrator”标记应用可确保系统将此程序标识为管理应用并执行必要的提升步骤。

    默认情况下,Visual C++ 链接器将 UAC 片段嵌入到执行级别为“asInvoker”的应用程序清单中。

    requestedExecutionLevel 元素还具有属性 uiAccess。 如果希望应用程序绕过用户界面保护级别并将输入驱动到桌面上的更高权限窗口,请将此值设置为 true;否则为 uiAccess='false'。 默认为 uiAccess='false'。 将此参数设置为 uiAccess='true' 仅适用于用户界面可访问性应用程序。 有关更多信息,请参阅 辅助技术的安全注意事项

    指定 requestedExecutionLevel 节点将禁用文件和注册表虚拟化。 如果要利用文件和注册表虚拟化实现向后兼容性,请省略 requestedExecutionLevel 节点。

    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
        <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
          <requestedExecutionLevel level="asInvoker" uiAccess="false" />
        </requestedPrivileges>
      </security>
    </trustInfo>
    

    下面是名为 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> 
                <!-- Windows 10 and Windows 11 -->
                <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
                <!-- Windows 8.1 -->
                <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
                <!-- Windows 8 -->
                <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
                <!-- Windows 7 -->
                <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
                <!-- Windows Vista -->
                <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
          </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>