应用 (可执行) 清单

平台

客户端 - Windows 8 服务器 - 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 及更高版本兼容的应用必须对剪辑窗口执行位。
  • 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”>)

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

SupportedOS: 支持的操作系统的 GUID - 映射到支持的操作系统的 GUID 包括:

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

    对于 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 行为正常工作。

资源