应用(可执行文件)清单

平台

客户端 – Windows 8
Server – Windows Server 2012

描述

Windows 中引入的应用(可执行)清单的兼容性部分可帮助作系统确定应用旨在面向的 Windows 版本。 此外,应用清单使 Windows 能够根据应用所面向的 Windows 版本提供应用所需的行为。

清单的兼容性部分允许 Windows 为新创建的软件提供新行为,同时保持现有软件的兼容性。 本部分还有助于 Windows 在将来的 Windows 版本中提供更高的兼容性。 例如,在兼容性部分中声明仅支持 Windows 8 的应用将继续在 Windows 的未来版本中接收 Windows 8 行为。

表现

在 Windows 7 和 Windows 8 及将来的 Windows 版本上,清单中没有兼容性部分的应用将默认具有 Windows Vista 行为。 请注意,Windows XP 和 Windows Vista 忽略此清单部分,并且不会影响它们。

这些 Windows 组件基于兼容性部分提供不同的行为:

远程过程调用 (RPC) 默认线程池

  • Windows 8 和 Windows 7:为了提高可伸缩性和减少线程计数,RPC 切换到 NT 线程池(默认池)。 对于 Windows Vista,RPC 使用了专用线程池:

    • 对于为 Windows 7 和更高版本的 Windows 编译的二进制文件,将使用默认池。
    • 如果在调用任何 RPC API 之前调用I_RpcMgmtEnableDedicatedThreadPool,则使用专用线程池(Vista 行为)。
    • 如果在 RPC 调用后调用I_RpcMgmtEnableDedicatedThreadPool,则使用默认池,I_RpcMgmtEnableDedicatedThreadPool返回错误 1764,并且不支持请求的作。
  • Windows Vista (默认值):对于为 Windows Vista 和早期版本的 Windows 编译的二进制文件,将使用专用池。

DirectDraw 锁

  • Windows 8 和 Windows 7:适用于 Windows 7 及更高版本的作系统的应用无法调用 DDRAW 中的锁定 API 来锁定主桌面视频缓冲区;这样做将导致错误,并返回主节点的 NULL 指针。 即使未打开桌面窗口管理器组合,也强制实施此行为。 为 Windows 7 和更高版本声明兼容的应用不得锁定主视频缓冲区才能呈现。
  • Windows Vista(默认):应用可以在主视频缓冲区上获取锁,因为旧版应用依赖于此行为;运行应用会关闭桌面窗口管理器。

DirectDraw 位块传输(bitblt)到主数据库,而无需剪辑窗口

  • Windows 8 和 Windows 7:Windows 7 及更高版本的 Windows 应用无法对主桌面视频缓冲区执行 bitblt,而无需剪辑窗口;这样做会导致错误,并且不会呈现 bitblt 区域。 即使未打开桌面窗口管理器组合,Windows 也会强制实施此行为。 为 Windows 7 和更高版本声明的兼容性的应用必须对剪辑窗口执行 bitblt。
  • Windows Vista(默认):应用必须能够在没有剪辑窗口的情况下对主数据库执行位片段,因为旧版应用依赖于此行为;运行此应用会关闭桌面窗口管理器。

GetOverlappedResult API

  • Windows 8 和 Windows 7:解决争用情况:使用 GetOverlappedResult 的多线程应用可以在不重置重叠结构中的事件的情况下返回,从而导致对此函数的下一次调用过早返回。
  • Windows Vista (默认值):提供应用可能依赖的争用条件的行为。 在 Windows 7 行为之前必须避免此争用的应用应等待重叠事件,并在发出信号时使用 bWait == FALSE 调用 GetOverlappedResult。

在高对比度模式下 Shell 主题状态

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

分区名称: 兼容性(新部分)

支持的OS: 受支持作系统的 GUID - 映射到支持的作系统的 GUID 为:

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

    for Windows Vista:这是切换回上下文的默认值

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

    for Windows 7:在应用清单中设置此值的应用获取 Windows 7 行为

  • {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}

    for Windows 8:在应用程序清单中设置此值的应用获取 Windows 8 行为

Microsoft会根据需要为将来的 Windows 版本生成和发布 GUID。

更新清单的 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 提供下层支持。 支持多个平台的应用不需要每个平台的单独清单。

测试

应用可以指定多个支持的作系统 ID。 如果已测试或正在测试该作系统上的应用,则应添加受支持的作系统 ID。 Windows Vista 和以前的作系统版本不注意这些条目。 从 Windows 7 开始,Windows 将在清单中选择运行 Windows 版本的最高版本 GUID,并在该级别提供应用支持。 若要验证应用是否适用于新的应用清单兼容性部分,请执行以下作:

  1. 使用新的兼容性部分和 SupportedOS ID = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} 测试应用,以确保应用使用最新的 Windows 8 行为正常工作。
  2. 使用新的兼容性部分和 SupportedOS ID 测试应用 = {35138b9a-5d96-4fbd-8e2d-a2440225f93a} 以确保应用使用 Windows 7 行为正常工作。
  3. 使用新的兼容性部分和 SupportedOS ID 测试应用 = {e2011457-1546-43c5-a5fe-008deee3d3f0} 以确保应用使用 Windows Vista 行为正常工作。

资源