应用程序清单
受影响的平台
客户端 - 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 的价值在于提供下级支持。 支持这两个平台的应用程序不需要每个平台的单独清单。
兼容性、性能、可靠性和可用性测试
- 使用新的兼容性部分
SupportedOS ID ={35138b9a-5d96-4fbd-8e2d-a2440225f93a}
测试应用程序,并确保应用程序使用最新的 Windows 7 行为正常工作 - 使用新的兼容性部分测试应用程序, (
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 中运行的应用程序引发的异常将被忽略,以获取更多详细信息。
指向其他资源的链接