应用程序清单

受影响的平台

客户端 - Windows 7
服务器 - Windows Server 2008 R2

功能影响

严重性 - 低
频率 - 低

说明

Windows 7 在应用程序清单中引入了名为“兼容性”的新部分。本部分可帮助 Windows 确定应用程序所针对的 Windows 版本,并使 Windows 能够根据应用程序的目标 Windows 版本提供应用程序所需的行为。

“兼容性”部分允许 Windows 为开发人员创建的新软件提供新行为,同时保持现有软件的兼容性。 本部分还帮助 Windows 在 Windows 的未来版本中提供更高的兼容性。 例如,在“兼容性”部分中声明仅支持 Windows 7 的应用程序在 Windows 的未来版本中将继续接收 Windows 7 行为。

更改的表现

默认情况下,清单中没有“兼容性”部分的应用程序将在 Windows 7 和将来的 Windows 版本上收到 Windows Vista 行为。 请注意,Windows XP 和 Windows Vista 会忽略此清单部分,并且对它们没有影响。

以下 Windows 组件根据 Windows 7 中的“兼容性”部分提供分歧行为:

RPC 默认线程池

  • Windows 7: 为了提高可伸缩性和减少线程计数,RPC 切换到 NT 线程池 (默认池) 。 对于 Windows Vista,RPC 使用了专用线程池。
    • 对于为 Win7 编译的二进制文件,使用默认池
    • 如果在调用任何 RPC API 之前调用I_RpcMgmtEnableDedicatedThreadPool,则会使用专用线程池 (Vista 行为)
    • 如果在 RPC 调用后调用I_RpcMgmtEnableDedicatedThreadPool,则使用默认池,I_RpcMgmtEnableDedicatedThreadPool返回错误 1764,并且不支持请求的操作
  • Windows Vista (默认) : 对于为 Windows Vista 及更低版本编译的二进制文件,使用专用池。

DirectDraw Lock

  • Windows 7: 针对 Windows 7 显示的应用程序无法调用 DDRAW 中的锁定 API 来锁定主桌面视频缓冲区。 这样做将导致错误,并且将返回主节点的 NULL 指针。 即使未打开桌面窗口管理器组合,也会强制实施此行为。 Windows 7 兼容应用程序不得锁定要呈现的主视频缓冲区。
  • Windows Vista (默认) : 应用程序将能够获取主视频缓冲区上的锁,因为旧版应用程序依赖于此行为。 运行应用程序会关闭桌面窗口管理器。

DirectDraw 位块传输 (Blt) 到主节点,而无需剪辑窗口

  • Windows 7: 禁止针对 Windows 7 显示的应用程序在没有剪辑窗口的情况下对主桌面视频缓冲区执行 Blt。 这样做将导致错误,并且不会呈现 Blt 区域。 即使你未打开桌面窗口管理器组合,Windows 也会强制实施此行为。 Windows 7 兼容应用程序必须 Blt 到剪辑窗口。
  • Windows Vista (默认) : 由于旧应用程序依赖于此行为,应用程序必须能够在没有剪辑窗口的情况下将 Blt 到主数据库。 运行此应用程序会关闭桌面窗口管理器。

GetOverlappedResult API

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

程序兼容性助手 (PCA)

  • Windows 7: “具有兼容性”部分的应用程序不会获得 PCA 缓解。
  • Windows Vista (默认) : 在某些特定情况下,在运行时无法正确安装或崩溃的应用程序将获得 PCA 缓解。 有关更多详细信息,请参阅参考部分。

利用功能

使用操作系统支持的最新兼容性信息更新应用程序清单。 本部分介绍清单的新增内容:

  • 命名 空间: Compatibility.v1 (xmlns=“urn:schemas-microsoft-com:compatibility.v1”>)

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

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

    • 适用于 Windows Vista 的 {e2011457-1546-43c5-a5fe-008deee3d3f0}:这是 switchback 上下文的默认值。
    • 适用于 Windows 7 的 {35138b9a-5d96-4fbd-8e2d-a2440225f93a}:在应用程序清单中设置此值的应用程序获取 Windows 7 行为。

    注意

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

     

下面是更新的清单的示例。

注意

应用程序清单中的属性和标记名称区分大小写。

 

<?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 application support for Windows Vista --> 
          <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        <!--The ID below indicates application support for Windows 7 --> 
          <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
      </application> 
    </compatibility>
  </assembly>

在上述示例中为两个操作系统添加 GUID 的价值在于提供下级支持。 支持这两个平台的应用程序不需要每个平台的单独清单。

兼容性、性能、可靠性和可用性测试

  1. 使用新的兼容性部分 SupportedOS ID ={35138b9a-5d96-4fbd-8e2d-a2440225f93a} 测试应用程序,并确保应用程序使用最新的 Windows 7 行为正常工作
  2. 使用新的兼容性部分测试应用程序, (SupportedOS ID ={e2011457-1546-43c5-a5fe-008deee3d3f0} 或不完全) 此部分,以确保应用程序在 Windows 7 上使用 Windows Vista 行为正常工作

已知问题

上下文不匹配 应用程序在运行 Windows 7 或 Windows Server 2008 R2 x64 版本的计算机上的 Windows Vista 上下文中运行,而不是在 Windows 7 上下文中运行。

解决方案汇报可用于更正所有受支持的基于 x64 的 Windows 7 和 Windows Server 2008 R2 版本以及所有受支持的基于 Itanium 的 Windows Server 2008 R2 版本。 转到知识库978637 Microsoft 支持部门页:应用程序在运行 x64 版本的 Windows 7 或 Windows Server 2008 R2 的计算机上的 Windows Vista 上下文中运行,而不是在 Windows 7 上下文中运行,以获取更多详细信息,并下载系统的正确版本。

故障转储诊断已阻止

解决 方案转到 KB 976038的“Microsoft 支持部门”页:从在 64 位版本的 Windows 中运行的应用程序引发的异常将被忽略,以获取更多详细信息。