应用程序清单

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

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

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

元素 属性 必须
程序集 (assembly)
manifestVersion
noInherit
assemblyIdentity
type
name
language
processorArchitecture
version
publicKeyToken
兼容性
应用
supportedOS Id
maxversiontested Id
dependency
dependentAssembly
文件
name
hashalg
hash
activeCodePage
autoElevate
disableTheming
disableWindowFiltering
dpiAware
dpiAwareness
gdiScaling
highResolutionScrollingAware
longPathAware
printerDriverIsolation
ultraHighResolutionScrollingAware
msix
heapType

文件位置

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

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

文件名

根据惯例,应用程序清单应与应用的可执行文件同名,扩展名 .manifest 追加到其中。

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

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

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

元素

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

程序集 (assembly)

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

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

程序集元素具有以下属性。

属性 说明
manifestVersion manifestVersion 属性必须设置为 1.0。

noInherit

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

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

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

assemblyIdentity

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

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

属性 说明
type 指定应用程序或程序集类型。 该值必须为 Win32,且全部以小写表示。 必需。
name 唯一命名应用程序或程序集。 对名称使用以下格式:Organization.Division.Name。 例如 Microsoft.Windows.mysampleApp。 必需。
language 标识应用程序或程序集的语言。 可选。 如果应用程序或程序集特定于语言,请指定 DHTML 语言代码。 在用于全球使用 (非特定语言的应用程序 的 assemblyIdentity 中,) 省略语言属性。
在用于全球使用的程序集的 assemblyIdentity 中, (非特定语言) 将语言的值设置为“*”。
processorArchitecture 指定处理器。 有效值包括 x86amd64armarm64。 可选。
version 指定应用程序或程序集版本。 使用四部分版本格式:mmmmm.nnnnn.ooooo.ppppp。 按句点分隔的每个部分可以是 0-65535(含 0- 65535)。 有关详细信息,请参阅 程序集版本。 必需。
publicKeyToken 一个 16 个字符的十六进制字符串,表示对应用程序或程序集进行签名的公钥的 SHA-1 哈希的最后 8 个字节。 用于对目录进行签名的公钥必须为 2048 位或更高版本。 所有共享并行程序集是必需的。

兼容性

至少包含一个 应用程序。 它没有属性。 可选。 没有兼容性元素的应用程序清单默认为 Windows 7 上的 Windows Vista 兼容性。

application

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

supportedOS

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

属性 说明
Id 将 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 Compatibility Cookbook
以下 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 上运行 Resource Monitor (resmon) ,转到 CPU 选项卡,右键单击列标签“选择列...”,并选中“操作系统上下文”。 在 Windows 8.x 上,还可以在 Task Manager (taskmgr) 中找到此列。 列的内容显示找到的最高值或默认的“Windows Vista”。

maxversiontested

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

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

属性 说明
Id 将 Id 属性设置为一个 4 部分版本字符串,该字符串指定应用程序所测试的 Windows 的最高版本。 例如,“10.0.18226.0”。

dependency

至少包含一个 dependentAssembly。 它没有属性。 可选。

dependentAssembly

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

文件

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

文件元素具有下表中显示的属性。

属性 说明
name 文件的名称。 例如,Comctl32.dll。
hashalg 用于创建文件的哈希的算法。 此值应为 SHA1。
hash 按名称引用的文件的哈希。 根据哈希算法,长度的十六进制字符串。

activeCodePage

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

从Windows 11开始,此元素还允许选择旧版非 UTF-8 代码页,或者为特定区域设置选择旧版应用程序兼容性的代码页。 强烈建议新式应用程序使用 Unicode。 在Windows 11,activeCodePage 也可以设置为“旧版”值或区域设置名称,例如 en-USja-JP

  • 在配置为 UTF-8 系统活动代码页的计算机上, 旧版 会将进程还原到系统区域设置代码页。 如果系统区域设置没有定义的代码页,则将使用 Windows-1252/437。 代码页设置仅在 Fusion 清单中受支持,仅从Windows 11开始。
  • 提供区域设置名称(如 en-US )时,将为该区域设置代码页适当地设置进程代码页。 例如,适用于 en-US 的 Windows-1252 和 437,或适用于 ja-JP 的 932。

此元素首次在 Windows 10 2019 年 5 月更新) 1903 版本 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 元素的状态 说明
不存在 默认情况下,当前进程不了解 dpi。 可以通过调用 SetProcessDpiAwarenessSetProcessDPIAware 函数以编程方式更改此设置。
包含“true” 当前进程是系统 dpi 感知的。
包含“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 感知设置的详细信息,请参阅 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 元素的操作系统的最低版本为版本 1607 Windows 10。 对于支持 dpiAwareness 元素的版本, dpiAwareness 将替代 dpiAware 元素。 如果要为 Windows 10 版本 1607 指定与早期版本的操作系统不同的行为,则可以在清单中包含这两个元素。

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

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

dpiAwareness 元素状态: 说明
元素不存在 dpiAware 元素指定进程是否感知 dpi。
不包含已识别的项目 默认情况下,当前进程不了解 dpi。 可以通过调用 SetProcessDpiAwarenessSetProcessDPIAware 函数以编程方式更改此设置。
第一个已识别项是“系统” 当前进程是系统 dpi 感知的。
第一个已识别项是“permonitor” 当前进程按监视器 dpi 感知。
第一个已识别项为“permonitorv2” 当前进程使用 per-monitor-v2 dpi 感知上下文。 此项仅在版本 1703 或更高版本Windows 10识别。
第一个已识别项是“不知道” 当前进程不知道 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 指示它已启用。 它没有属性。

msix

指定具有当前应用程序外部位置的包的标识信息, (通过打包外部位置) 来查看授予包标识 。 Windows 10版本 2004 及更高版本中支持此元素。

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

属性 说明
publisher 描述发布者信息。 此值必须与打包应用的包清单中的 Identity 元素中的 Publisher 属性与外部位置匹配。
packageName 描述包的内容。 此值必须与打包应用的包清单中 Identity 元素中的 Name 属性与外部位置匹配。
applicationId 应用程序的唯一标识符。 此值必须与打包应用的包清单中的 Application 元素中的 Id 属性与外部位置匹配。
<?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>

示例

下面是名为 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>