windows 8 和 windows server 2012 兼容性手册€¦ · web view尽管 windows 8 和 windows...
TRANSCRIPT
Windows 8 和 Windows Server 2012 兼容性手册
Windows 8 和 Windows Server 2012兼容性手册有关 Windows 兼容性、可靠性以及性能的开发人员指南
2012 年 9 月 11 日
摘要
在本手册 中,我们提供有关 Windows® 8 和 Windows Server® 2012 操作系统中的更改功能和新功能的信息。还提供验证现有和计划的应用与新操作系统的兼容性的指南。我们假定你熟悉以前版本的 Windows。
本手册 面向设计为在 Microsoft Windows 环境中使用的应用的第三方开发人员,可以在 http://msdn.microsoft.com/library/hh848074(v=vs.85).aspx 处查看本手册,并且可以在http://www.microsoft.com/downloads/details.aspx?FamilyID=2D6A4111-9F14-4DB8-A4C2-BE8C8C1414AD&displaylang=e&displaylang=zh-cn 处下载。
本内容适用于:
Windows 8
Windows Server 2012
Windows Server 2008 R2
Windows 7
Windows Server 2008
Windows Vista®
Windows Server 2003
Windows Server 2003
免责声明:本文档按“原样”提供。本文档中所述的信息和观点(包括引用的 URL 和其他 Internet 网站)可能随时更改,恕不另行通知。使用本文档所带来的风险由你自行承担。
本文档不向你提供使用 Microsoft 产品中任何知识产权的合法权利。你可以复制和使用本文档作为内部参考之用。你可以修改本文档作为内部参考。
© 2011 Microsoft. 保留所有权利。
目录
引言4
客户端和服务器兼容性5
操作系统版本6
安全应用检测规则更新7
确定填充码状态8
服务器应用必须能够在没有服务器图形 Shell 的情况下运行9
从 Windows 8 中删除了远程数据服务服务器组件12
文件类型和协议关联模型13
桌面活动审查器15
东亚语言输入指南19
软件输入面板与软件键盘22
将文本输入切换从每线程更改为每用户23
.NET Framework 4.5 为默认值,.NET Framework 3.5 为可选25
启动默认的 Web 浏览器或 Windows 8 应用后,可能无法显示桌面应用28
高对比度模式29
应用(可执行文件)清单33
以队列形式呈现的模型已弃用37
Windows 8 的程序兼容性助手方案38
删除了桌面小工具56
高级格式 (4K) 磁盘兼容性更新57
逻辑单元的精简配置67
增强存储现在对于 WINPE 和服务器 SKU 是可选的69
虚拟磁盘服务正在转换为 Windows 存储管理 API70
删除了本地卷的以前版本的 UI72
StorAHCI 取代了 MSAHCI73
Windows 7 备份和还原已弃用74
卸载数据传输75
桌面窗口管理器始终启用77
Direct2D 呈现不支持呈现到 Internet Explorer 9 中的“富”元文件80
DX9 过时硬件支持的变更81
MSAA 不可用于 Windows 应用商店应用82
已经对 NDIS 6.30 驱动程序弃用端口 383
新功能和增强功能84
提前启动反恶意软件85
内核模式驱动程序的安全启动功能签名要求87
测量的启动88
启动应用89
自动维护92
第三方输入法编辑器100
新 API 允许应用向存储介质发送 “TRIM 和 Unmap” 提示107
多路径 I/O 现在支持扩展存储请求块110
弹性文件系统112
文件服务器 API 支持113
新的文件历史记录功能114
操作系统现在控制光盘驱动器的电源115
支持 USB 3.0116
工具、最佳做法和指南117
Windows 评估工具包118
Windows 应用认证包123
Windows Server 应用认证工具包125
Windows 硬件认证工具包127
引言
Windows 8 和 Windows Server 2012 引入了最新的操作系统技术和软件开发平台,可供全球的应用开发人员和企业使用。为了进一步改进 Windows 的安全性、可靠性、性能以及用户体验,Microsoft 引入了很多新的功能、改进了现有的功能并剔除了一些功能。
尽管 Windows 8 和 Windows Server 2012 的目标是与大多数针对之前发布的操作系统编写的各个应用保持较高的兼容性,但由于进行了创新、加强了安全性并且提高了可靠性,不可避免会出现某些兼容性问题。总的来说,Windows 8 和 Windows Server 2012 与现有应用的兼容性还是比较高的。
本文档是基于 Windows Vista 和 Windows Server 2008 应用程序兼容性手册 (http://msdn.microsoft.com/library/bb757005.aspx) 以及 Windows 7 和 Windows Server 2008 R2 应用程序质量手册
(http://msdn.microsoft.com/library/dd371778(v=VS.85).aspx) 中包含的概念而构建的。与这两个手册一样,本文档向你介绍如何验证你的应用是否与新的操作系统兼容,并且概述一些 Windows 8 和 Windows Server 2012 中已知的不兼容的问题。
此外,Microsoft 正在投资几个新功能和增强功能,目的是帮助你构建更高质量的应用以及当应用无法在 Windows 8 和 Windows Server 2012 上正常工作时帮助你进行诊断。
本手册 包含三十多个主题,这些主题分为三个主要部分:
客户端和服务器兼容性
新功能和增强功能
工具和最佳做法
在此版本的手册 中新增了以下四个主题:
从 Windows 8 中删除了 RDS 服务器组件
东亚语言输入指南
软件输入面板与软件键盘
删除了桌面小工具
更新了一个主题:
将文本输入切换从每线程更改为每用户
我们邀请你查看这些主题,以便了解如何优化你的应用以及如何利用此最新版本的 Windows 提供的功能。
客户端和服务器兼容性
本部分介绍你应该特别注意的操作系统的更改,因为这些更改可能会影响现有的应用,同时还介绍应该如何在客户端、服务器或两者上设计新的应用。下面是本部分所涉及的主题列表,按功能区域分组:
AppCompat
Windows 8 和 Windows Server 2012兼容性手册 – 11
2012 年 9 月 11 日© 2012 Microsoft. 保留所有权利。
操作系统版本
安全应用检测规则更新
确定填充码状态
服务器应用必须能够在没有服务器图形 Shell 的情况下运行
从 Windows 8 中删除了 RDS 服务器组件
文件类型和协议关联模型
桌面活动审查器
东亚语言输入指南
软件输入面板与软件键盘
将文本输入切换从每线程更改为每用户
.NET Framework 4.5 为默认值,.NET Framework 3.5 为可选
启动默认的 Web 浏览器或 Windows 8 应用后,可能无法显示桌面应用
高对比度模式
应用(可执行文件)清单
以队列形式呈现的模型已弃用
Windows 8 的程序兼容性助手方案
删除了桌面小工具
存储和文件系统
高级格式 (4K) 磁盘兼容性更新
逻辑单元的精简配置
增强存储现在对于 WINPE 和服务器 SKU 是可选的
VDS 正在过渡到基于 WMIv2 的 Windows 存储管理 API
删除了本地卷的以前版本的 UI
StorAHCI 取代了 MSAHCI
Windows 7 备份和还原已弃用
卸载数据传输
其他
桌面窗口管理器始终启用
Direct2D 不支持在 Internet Explorer 9 中呈现为“富”元文件
DX9 过时硬件支持中的变更
MSAA 不可用于 Windows 应用商店应用
已经对 NDIS 6.30 驱动程序弃用端口 3
操作系统版本
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
Windows 8 和 Windows Server 2012 的内部版本号为 6.2。所有 API 版本都将返回此版本号 (GetVersion, GetVersionEx)。
表现
此更改的表现特定于应用。这意味着明确检查操作系统版本的任何应用都将获得较高的版本号,这可导致以下一种或多种情形:
应用安装工具可能无法安装应用,并且应用可能无法启动
应用可能变得不稳定或者发生故障
应用可能生成错误消息,但会继续正常运行
缓解操作
对于依赖之前版本的客户端应用,使用以下 VersionLie 填充码:
Win7RTMVersionLie(也可以用在服务器上)
VistaSP2VersionLie
WinXPSP3VersionLie
若要检查版本而不阻止用户安装或运行应用,请进行“大于或等于检查”。你可以将其与 VerifyVersionInfo Win32 API 结合使用(http://msdn.microsoft.com/library/ms725492(VS.85).aspx)。
解决方案
通常,应用不应该进行操作系统版本检查。如果某个应用需要某个特定的功能,最好尝试查找此功能,仅当缺少所需的功能时才会失败。至少,应用应该始终接受大于或等于所支持的操作系统最低版本的版本号。仅当有特定的法律、商务或者系统组件要求时,才会出现例外。
资源
应用程序兼容性工具包下载
http://go.microsoft.com/fwlink/?LinkID=205020
已知的兼容性修复程序、兼容性模式以及 AppHelp 消息
http://go.microsoft.com/fwlink/?LinkID=205039
安全应用检测规则更新
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
添加到 Windows 8 中的 Windows 应用商店应用全都安装在 “Program Files” (%programfiles%) 下一个名为 \program files\WindowsApps 的通用位置。
表现
这可能会导致与现有配置发生冲突,并且某些防病毒/反恶意软件探测器会将此位置视为可能存在问题的位置。
缓解操作
当前建议如下:
不在 \program files\WindowsApps 下存储任何自定义应用
防病毒/反恶意软件供应商应该更新其启发,以便不会将该位置标识为恶意位置
确定填充码状态
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
当由于各种原因而填充应用时,Windows 8 会记录事件。确定你的应用是否被填充的最简单方法是检查事件查看器。转到 Applications and Services Logs\Microsoft Windows Application-Experience Program\Telemetry。
缓解操作
避免填充的最简单方法是重命名可执行文件或者将主要版本增加 1(重新编译可执行文件)。
服务器应用必须能够在没有服务器图形 Shell 的情况下运行
平台
服务器 — Windows Server 2012
描述
服务器图形 Shell 功能包括 Windows Explorer 和 Internet Explorer,默认情况下在 Windows Server 2012 的“带有 GUI 的服务器”安装上安装。可以卸载服务器图形 Shell 功能以便减少可能的服务和性能占用,因此可能会导致限制服务器的重新启动次数,同时仍然允许管理工具在服务器上本地运行。
管理员卸载服务器图形 Shell 之后,服务器处于“最精简服务器界面”配置中:
然后,管理员可以选择在“最精简服务器界面”配置(该配置包含一组本地管理工具)中运行,以此作为默认设置,而不选择在“带有 GUI 的服务器”配置中运行。这会允许本地监控和管理,同时会减少资源使用并降低服务的频率。
如果管理员需要其中的功能,那么他们可以稍后重新安装服务器图形 Shell。(管理员还可以从服务器核心安装启动,并且使用“按需功能”功能“构建”到“最精简服务器界面”配置。)
服务器应用必须能够在“最精简服务器界面”配置中运行,以便利用减少的资源利用以及服务占用。该功能可以通过以下两种方式实现:允许管理员选择不安装需要服务器图形 Shell 的应用部分、检测服务器图形 Shell 是否存在并禁用应用的某些方面。
“最精简服务器界面”减少了资源以及服务占用,因为服务器图形 Shell 中包含的很多 API 和二进制文件在此配置中不可用。
在恰当的情况下,服务器应用还应该允许通过其他 Windows 服务器或 Windows 客户端安装进行远程管理(最好通过 Windows PowerShell 远程处理)。这样便能够更好地对“最精简服务器界面”配置中的一台或多台计算机进行集中管理,甚至对较低占用配置(如“服务器核心”)的计算机进行集中管理。
表现
如果某个应用需要“最精简服务器界面”配置中不可用的任何 API 或二进制文件,那么该应用可能无法在屏幕上正确显示和/或该应用无法使用。
缓解操作
服务器应用开发人员应该标识他们应用中需要任何已删除的 API 或二进制文件的那些部分,并加入用于服务器管理员标识使用“最精简服务器界面”时无法正常运行的应用部分的信息。如果应用的那些部分可以进行选择性安装或者对产品功能来说不是绝对需要的,那么仍然可以安装该应用并在“最精简服务器界面”配置下运行。
如果在没有服务器图形 Shell 的情况下应用根本无法使用,则应该记录此限制并且应该指示服务器管理员安装服务器图形 Shell。(如果添加到服务器核心安装,则可能需要使用“按需功能”添加功能。)此外,应用应该在启动时检查所有所需的文件是否可用,因为在安装该应用之前或之后,可以随时卸载服务器图形 Shell。
解决方案
依赖最小的可能依赖关系集,对应用进行模块化处理以便核心应用功能可以工作,而无需安装更多重量级用户界面组件。开发以下应用:不需要任何已删除 API 或二进制文件,而是依赖“最精简服务器界面”或“服务器核心”中包含的功能。这将减少维护需求,同时提高性能和用户满意度。
当存在服务器图形 Shell 可用时可能会添加大量功能的应用部分时,应用开发人员可以:
允许有选择地安装利用服务图形 Shell 的其他功能,因此可以从“最精简服务器界面”配置的安装中忽略这些功能。
检查服务器图形 Shell 是否存在并且适应应用行为
应用开发人员还应该确保服务器应用尽可能能够正确进行远程管理。
检测“最精简服务器界面”和“服务器核心”
Windows Server 将为安装的每个服务器级别安装一个对应的注册表值。你可以查询这些键是否存在,以确定是否安装和启用了服务器图形 Shell 或“最精简服务器界面”功能。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Server\ServerLevels:
Server Core
Minimal Server Interface
Server Graphical Shell
ServerCore=1
X
X
X
Server-Gui-Mgmt=1
X
X
Server-Gui-Shell=1
X
上表中的 “X” 表示当安装相应的功能时会存在该注册表项。
请注意,这些服务器级别是累加的;如果安装了服务器图形 Shell,则也安装了“最精简服务器界面”和“服务器核心”。在这种情况下,两个注册表项都 将存在。
测试
检查你的应用代码,看是否有使用任何已删除的 API 和二进制文件的要求。从“核心应用程序”二进制文件中删除这些内容的任何实例之后,在不包含服务器图形 Shell 的环境中测试你的应用。诸如进程监视器之类的工具可能会对此有所帮助。
如果你无法完全停止对这些 API 和二进制文件的使用,则确保你的应用在“最精简服务器界面”或“服务器核心”上运行时平稳地失败。
资源
MSDN 上的现有服务器核心文档
http://msdn.microsoft.com/library/ms723891(v=vs.85).aspx
从 Windows 8 中删除了远程数据服务服务器组件
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
远程数据服务 (RDS) 服务器在 Windows 8 中不可用:
删除了文件 msadcf.dll(该文件托管默认的“业务对象”RDSServer.DataFactory)及其关联的文件(msadcfr.dll、msadcfr.dll.mui、handler.reg 和 handsafe.reg)
删除了文件 msdfmap.dll(该文件为默认的处理程序),还删除了文件 msdfmap.ini
删除了文件 msadcs.dll(即 ISAPI)
表现
客户无法在 Windows 8 上托管 RDS 服务器。
缓解操作
客户可以在具有 Windows 7 或其他版本级别较低的操作系统的计算机上保留他们的 RDS 服务器。
解决方案
客户可以在具有 Windows 7 或其他版本级别较低的操作系统的计算机上保留他们的 RDS 服务器。
资源
数据访问技术路线图
http://msdn.microsoft.com/zh-cn/library/ms810810.aspx
文件类型和协议关联模型
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
在 Windows 8 中,已经对文件类型和协议关联模型进行了更改。应用不再能通过编程方式将自己设置为某个文件类型或协议的默认处理程序。现在,用户始终控制文件类型或协议的默认处理程序。
表现
此更改呈现给用户的方式取决于应用的设计方式,例如:
很多应用都在每次运行时检查它们是否是默认设置,如果不是,则会提示用户将它们设为默认设置。但是,由于应用不再可以通过精确查询来确定哪个应用是文件类型或协议的默认处理程序,因此这些行为都无效。
很多应用在其安装程序中都有一个内置的对话框或菜单,该对话框或菜单指定应用应该作为默认设置的文件类型。但是,由于应用不再可以通过编程方式将自己设置为文件类型或协议的默认处理程序,因此该行为不再有效。
缓解操作
用户可以采取很多措施来适应这些更改:
通过上下文提示用户选择默认的应用来处理文件类型、协议或两者(尚未指定其中一个时)
为用户提供在安装可以处理文件类型或协议的新应用之后更改其默认处理程序的选项
默认程序控制面板允许用户为应用或为文件类型、协议或两者设置默认值;应用可以链接到控制面板
可以通过 Windows 资源管理器更改默认设置
解决方案
由于这些更改的缘故,我们提供了此 API 指南:
IApplicationAssociationRegistration API 中的某些方法调用功能已进行了更改,不应再使用。
· 不要 调用 QueryAppIsDefault/QueryAppIsDefaultAll 来确定应用是否是默认设置
· 不要 调用 QueryCurrentDefault 来确定哪个应用(如果有)是当前默认值
· 不要 调用 SetAppIsDefault/SetAppIsDefaultAll 来设置默认应用
指南如下:
不要 进行查询来查看哪个应用是文件类型或协议的默认处理程序
· 不要 尝试监视文件类型或协议的默认处理程序中的更改
· 不要 尝试将应用设置为文件类型或协议的默认处理程序
· 不要 尝试从应用内管理文件类型或协议的默认设置
· 如果你想允许应用的用户访问默认的管理 UI(不再支持应用内的管理 UI),请 与设置默认程序控制面板集成
· 调用 IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI 允许用户访问特定应用的“设置默认程序”控制面板页
测试
进行测试以验证应用是否在“设置默认程序”控制面板中正确注册
进行测试以验证应用是否正确注册,从而出现在注册进行处理的文件类型、协议或两者的 OpenWith 列表中
进行测试以验证安装应用且用户调用应用注册进行处理的文件类型、协议或两者后是否出现新应用通知
资源
Windows 开发者预览版桌面应用中文件类型和协议关联的最佳做法
http://go.microsoft.com/fwlink/?LinkId=228165
文件类型关联和自动播放生成会议演示文稿
http://channel9.msdn.com/events/BUILD/BUILD2011/PLAT-282T
桌面活动审查器
平台
客户端 — Windows 8
注意:仅在支持连接待机的 Windows 8 客户端计算机上提供 DAM。服务器 SKU 上不提供 DAM。
注意:Windows 应用商店应用不会受到 DAM 的影响。
描述
我们的客户正在转向更轻、更小且更灵活的平台来满足他们的计算需求。在转向移动设备的过程中,用户越来越关心他们设备的电池寿命。桌面活动审查器 (DAM) 是 Windows 8 中为了确保支持连接待机的设备拥有始终如一的较长电池使用时间而设计的几个新功能之一。
当打开设备电源,但关闭屏幕时会发生连接待机。在这种电源状态中,从技术上来说系统始终“打开”(目的是支持诸如邮件、VoIP、社交网络以及与 Windows应用商店应用即时消息传递之类的关键方案)。这类似于用户按电源按钮时智能手机所处的状态。
因此,在连接待机期间软件(包括应用和操作系统软件)必须行为良好。创建 DAM 的目的是采用类似于睡眠状态(ACPI 设备上的 S3)的方式抑制桌面应用执行。实现方式是在进入连接待机时挂起或限制系统中的桌面软件进程。这样支持连接待机的系统便能够提供最小的资源使用以及始终如一的较长电池使用时间,同时 Windows应用商店应用能够提供他们承诺的连接体验。
详细信息
DAM 是一个内核模式驱动程序,如果系统支持连接待机,则会在系统启动时加载和初始化该程序。(这通过评估 CallNtPowerInformation 返回的SYSTEM_POWER_CAPABILITIES 结构中的 AOAC 字段是否设置为 TRUE 来确定)。
当启用 DAM 且创建你的桌面进程时,DAM 会将你的进程添加到系统管理的作业对象:
如果进程是在会话 0 中创建的,则 DAM 会将该进程添加到要限制的作业对象。
如果进程是在交互式会话(会话 1 或更高)中创建的,则 DAM 会将该进程添加到要挂起的作业对象。
注意:对于 Windows 8,可以嵌套作业对象。这意味着 DAM 对作业对象的使用不会干扰应用对作业对象的现有使用。
当屏幕打开时,DAM 未占用,不影响系统上的任何进程。当系统处于连接待机状态时,根据系统上的活动,DAM 可能会限制或挂起进程。
要挂起的进程挂起它们的所有线程(任何情况下都不允许运行);保持应用状态(进程内存)。
要限制的进程在挂起和取消挂起之间循环(大多数时间处于挂起状态)
请注意,Windows 还可能会检测是否正在发生重要活动,并且在该活动期间可能会在较长的时间内对受限制的服务取消挂起。
还要注意,当处于连接待机状态时,传感器和网络可能无法使用,因此受限制的进程应该设计为对较差的网络条件具有弹性(对于大多数进程来说,这不需要进行任何更改)。
当使用或未使用 DAM 挂起时,DAM 触发向要挂起且已选择消息传递的进程对象发送 WM_POWERBROADCAST 消息(通过 API 调用或兼容性填充码,这将在后面部分进行介绍)。几秒钟的延迟之后,DAM 挂起该进程。
使用或未使用 DAM 限制时都没有任何通知。进程应该不需要修改;进程继续工作,只是速度较慢。
表现
在处于连接待机状态期间,通常会挂起或限制进程。对于大多数挂起的应用来说,这应该与 S3 挂起/恢复或 S4 休眠/恢复转换非常类似。表现可能包括但不限于运行时间与时钟时间的不一致、计时器行为的不一致,或者完成挂起之前或之后操作系统状态的显著更改。
挂起和限制是作为一个整体发生的(所有可挂起的进程都一致地挂起和取消挂起,并且所有可限制的进程都一致地限制和取消限制),因此两个挂起进程或两个限制进程之间的通信不会引发问题。
依赖进程间通信的软件可能需要特殊考虑:
会话 0(已限制)和会话 1+(已挂起)之间的通信 — 示例包括表示当前服务状态的任务栏图标或 UI 组件
用户模式(会话 0 或 1)和驱动程序(既未受限制也未挂起)之间的通信) — 示例包括代表驱动程序工作的服务
在这些情况下,如果进程间通信未正确处理,则应用可能会显示挂起或无响应(但用户可能无法直接看到该影响,因为当处于连接待机状态时屏幕将关闭)。但是多数情况下,应该已经针对进程间通信问题开发了强大的服务和驱动程序。
为 Web 创建软件或依赖 Web 的供应商应该考虑进程挂起如何影响连接生存时间和握手。此外,由于处于连接待机模式时网络连接可能不可用,在会话 0 中创建进程的开发人员应该特别注意间歇的网络连接如何影响进程。
解决方案
Windows应用商店应用不会受到 DAM 的影响。如果你的桌面应用受到 DAM 的影响,则可以使用以下方法之一请求在进行挂起之前进行通知(例如,为了保存状态或关闭网络连接):
如果你的应用有一个窗口 (HWND) 并且你希望通过你的窗口程序处理这些通知,则调用 RegisterSuspendResumeNotification 来注册这些消息(或者调用UnregisterSuspendResumeNotification 取消注册)。你可以在 Flags 参数中使用 DEVICE_NOTIFY_WINDOW_HANDLE 并传入窗口的 HWND 作为 Recipient 参数。收到的消息为 WM_POWERBROADCAST 消息。
如果你的应用没有窗口 (HWND) 或者你希望直接回调,则调用PowerRegisterSuspendResumeNotification 来注册这些消息(或者调用PowerUnregisterSuspendResumeNotification 来取消注册)。你必须在DEVICE_NOTIFY_CALLBACK 中使用 Flags 参数并在 Recipient 参数中传递类型 PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS 的值。
如果你的应用无法重新编译,则可以选择通过 AppCompat 工具包(使用 PromoteDAM 填充码)接收这些 WM_POWERBROADCAST 消息。
挂起消息为 WM_POWERBROADCAST,其中 wParam=PBT_APMSUSPEND;该消息同时播发到系统上所有选择的进程。你的应用必须快速有效地在挂起路径上进行任何工作。播发通知后超时是全局的,而非针对每个进程,因此如果该路径中所需的工作非常多,那么你的进程可能会争用系统资源。
恢复消息为 WM_POWERBROADCAST,其中 wParam=PBT_APMRESUME;恢复后,该消息同时播发到进程中所有选择的进程。无法保证系统从联机待机状态退出的相对传递时间。
测试
跨连接待机转换测试软件。
资源
Windows 7 的移动电池使用时间解决方案
http://msdn.microsoft.com/zh-cn/windows/hardware/gg487547
SYSTEM_POWER_CAPABILITIES
http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa373215(v=vs.85).aspx
CallNtPowerInformation 函数
http:/msdn.microsoft.com/library/windows/desktop/aa372675(v=vs.85).aspx
作业对象
http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms684161(v=vs.85).aspx
RegisterSuspendResumeNotification
http://go.microsoft.com/fwlink/?LinkId=239911
UnregisterSuspendResumeNotification
http://go.microsoft.com/fwlink/?LinkID=239912
PowerRegisterSuspendResumeNotification
http://go.microsoft.com/fwlink/?LinkId=239913
PowerUnregisterSuspendResumeNotification
http://go.microsoft.com/fwlink/?LinkID=239914
AppCompat 工具包
http://www.microsoft.com/download/zh-cn/details.aspx?displaylang=en&id=7352
东亚语言输入指南
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
在 Windows 8 中,为日语、简体中文、繁体中文、朝鲜语的大多数 UI 一致地启用 ClearType 字体,在经典和沉浸式样式中都是如此。
字体系列
字体名称不变:
日语
朝鲜语
简体中文
繁体中文
Meiryo UI
Malgun Gothic
Microsoft YaHei UI
Microsoft JhengHei UI
字体规格(9 磅)
在 Windows 8 中,为了提供与英文 UI 相同的 UI 外观以及一致的用户体验,简体中文和繁体中文 UI 字体更加严格遵守 Segoe UI 规格。
9 磅
Microsoft Yahei UI
Microsoft JhenHei UI
Malgun Tothic
Meiryo UI
Segoe UI
tmAscent
13
12
12
12
12
tmDescent
4
4
3
3
3
tmHeight
17
16
15
15
15
tmInternalLeading
5
4
3
3
3
高度(100DU 的像素值)
213
200
188
188
188
注册表设置
Windows 8 已经更新了东亚语言的 FontLink 链并在以下位置进行了定义:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink,目的是支持简体中文和繁体中文的新字体:
日语 SKU:指向 Meiryo UI 的 Segoe UI 链接
朝鲜语 SKU:指向 Malgun Gothic 的 Segoe UI 链接
简体中文 SKU:指向 Microsoft YaHei UI 的 Segoe UI 链接
繁体中文 SKU(包括香港 SKU):指向 Microsoft JhengHei UI 的 Segoe UI 链接
此外,所有 UI 字体都彼此链接。
Segoe UI 和东亚 (EA) ClearType 字体之间的字体粗细映射:
Segoe UI
EA ClearType 字体
细
常规
半细
常规
常规
常规
半粗
粗体
粗体
粗体
沉浸式阅读
对于沉浸式阅读方案(如电子书籍)来说,UI 字体为默认字体。沉浸式阅读假定较长的阅读时间并且意味着可能会将较长的文本分为多个章节。
电子阅读应用可能允许读者更改字体。我们还期望更多电子书内容采用设计人员指定的常用嵌入字体格式。
交互式文本
UI 字体用在诸如用户在其中撰写文本的邮件或聊天之类的应用程序中。这些字体属于为阅读屏幕上的较长文本而设计的 sans serif 字体系列。它是 Microsoft Outlook、Word 和 PowerPoint 中的默认字体。
现代 CSS 实现中用于阅读和交互的东亚语言字体:
默认设置
@authoringFontFamily: Calibri, Verdana, Arial, Helvetica, sans-serif;
@readingFontFamily: Cambria, Times New Roman, Times, serif;
@fontSizeAuthoring: 14.66667px;
@fontSizeReading: 14.66667px;
日语
@authoringFontFamily: Meiryo, Calibri, Verdana, Arial, Helvetica, sans-serif;
@readingFontFamily: MS Gothic, Cambria, Times New Roman, Times, serif;
@fontSizeAuthoring: 15.33px;
@fontSizeReading: 14.66667px;
朝鲜语
@authoringFontFamily: Malgun Gothic, Calibri, Verdana, Arial, Helvetica, sans-serif;
@readingFontFamily: Batang, Cambria, Times New Roman, Times, serif;
@fontSizeAuthoring: 15.66px;
@fontSizeReading: 14.66667px;
zh-Hans
@authoringFontFamily: Microsoft YaHei, Calibri, Verdana, Arial, Helvetica, sans-serif;
@readingFontFamily: SimSun, Cambria, Times New Roman, Times, serif;
@fontSizeAuthoring: 14.66667px;
@fontSizeReading: 15.5px;
zh-Hant
@authoringFontFamily: Microsoft JhengHei, Calibri, Verdana, Arial, Helvetica, sans-serif;
@readingFontFamily: MingLiu, Cambria, Times New Roman, Times, serif;
@fontSizeAuthoring: 14.66667px;
@fontSizeReading: 14.66667px;
表现
Windows 8 中的此字体更改可能会影响在未指定字体的情况下调用公共控件和公共文件对话框的新应用程序和现有应用程序。
例如,如果在未设置特定字体的 MFC 应用程序中有一个 CPropertySheet 对话框,则属性表将使用新的 ClearType 字体。另一方面,此更改不会影响 WinForms 控件。
测试
测试你的应用程序,看是否需要进行任何修改,如指定字体或调整控件大小。
软件输入面板与软件键盘
平台
客户端 — Windows 8
描述
在以前版本的 Windows 中,软件键盘用来在没有物理键盘的情况下输入字符。设计软件输入面板 (SIP) 的目的是改进 Windows 8 触摸设备的输入体验。东亚语言 SIP 发送字符代码而不是发送 v-key 事件,这与软件键盘的行为方式不同。如果应用程序或网站只处理键事件,那么该应用程序可能无法如期工作。
表现
如果应用程序完全基于 v_Key 事件,则用户将无法对该应用程序执行操作。有一些网站在 JavaScript 代码中使用了 v_Key 事件,目的是在用户发送之前获取输入文本。例如,当用户输入邮政编码时,网站可以显示地址。如果网站无法显示地址候选,则用户可以自己输入地址。
缓解操作
用户可以使用标准布局,代替优化布局。另一种选择是使用英文 SIP。
解决方案
开发人员可以将应用程序更改为处理字符代码,而不处理 v_Key 事件。使用 JavaScript 事件处理程序 onKeyUp() 和 onKeyDown() 的网站可以使用 oninput()。备用选项是禁用 TSF。
将文本输入切换从每线程更改为每用户
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
以前,输入语言键盘布局和 IME 开关(包括 IME 模式)是特定于线程的。例如,如果用户打开了一个记事本文件并且将输入语言从英语更改为日语,然后又打开了一个写字板文件并且将输入语言从英语更改为德语,那么记事本文件将保留日语作为它的输入语言,而写字板文件将保留德语作为它的输入语言。在 Windows 8 和 Windows Server 2012 中,我们将此每线程的方法更改为每用户的方法。这意味着当在一个应用中更改输入语言或 IME 模式时,如果焦点在其他应用上,则也会在其他应用上应用此更改。在上面的示例中,当用户将记事本文件输入语言更改为日语,然后打开一个写字板文件时,写字板输入语言也将为日语。如果用户将写字板输入语言更改为德语,则当用户返回记事本文件时,记事本文件的输入语言将为德语,而不是日语。另一个示例是,如果用户在记事本文件中将朝鲜语 IME 模式更改为字母数字模式,然后打开另一个记事本文件,那么该文件也将采用字母数字模式打开。
由于默认情况下输入切换现在采用每用户而不是每线程的机制,因此某些桌面应用行为可能有所不同。会话使用默认的方法启动,然后当前设置跟随焦点。每用户输入切换将对新打开的应用使用当前输入方法。
桌面应用中使用的以下 API 会受到影响:
ImmSetConversionStatus
ActivateKeyboardLayout
这些 API 中的语言或 IME 模式将跟随焦点并且在线程之间应用,而不是仅应用于当前线程。当焦点位于前台时,每用户输入切换处于活动状态。如果在焦点位于应用上之后调用 API,那么当焦点稍后移动到其他应用时,API 进行的更改将应用于这些应用。如果在焦点位于应用上之前调用 API,那么 API 所进行的语言或 IME 模式更改将被替换为每用户输入切换,使用用户上次切换到的当前输入语言或 IME 模式。
例如,用户在应用 A 中键入时使用英语。然后用户启动应用 B,该应用调用 API ActivateKeyboardLayout 将输入语言更改为德语。如果在焦点位于应用 B 上之后调用 API,那么不仅应用 B 的输入语言为德语,而且当用户返回应用 A 时,应用 A 的输入语言也为德语。如果在焦点位于应用 B 上之前调用 API,那么应用 B 的输入语言将为英语,而不是德语。
除了调用 ImmSetConversionStatus 之外,还可以按照应用程序设置的输入范围来更改 IME 模式。某些应用(包括 Windows 应用商店应用)可能会在某些文本字段上设置输入范围,如“密码”字段、URL 字段或电子邮件字段。某些 IME 会对输入范围作出响应并根据输入范围更改 IME 模式。
日语 Microsoft IME 行为
日语 IME 按每个应用程序保留转换模式(Hiragana、Halfwidth-AlphaNumeric、Fullwidth-Katakana、Halfwidth-Katakana 和 Fullwidth-AlphaNumeric),这意味着每个应用程序都保留转换模式。这是因为转换模式附加于应用程序的特殊输入字段。切换应用程序之后,Microsoft IME 将作为 Hiragana 模式进行处理。
因此,当在每用户模式中使用时,日语 Microsoft IME 忽略通过调用ImmSetConversionStatus 进行的转换模式更改。此 API 在 .NET Framework 的 IME模式属性中使用。建议使用 InputScope 以便在 Windows 8 中在每用户模式下设置 IME 模式。
表现
在第一个应用中更改输入语言之后,在其他应用中打开的文件将使用与初始应用相同的输入语言。
缓解操作
若要将输入切换从每用户重置为每线程,请执行以下操作:
1. 转到“控制面板”。
2. 选择“时钟 | 语言和区域 | 语言配置文件”。
3. 单击“高级设置”。
4. 在“切换输入法”部分中,选中“允许我为每个应用窗口设置不同的输入法”框。
5. 单击“保存”。
解决方案
开发应用时记住使用每用户模式。对于每用户输入切换,我们不建议应用在用户不知道的情况下重置语言或 IME 模式。如果应用需要更改 IME 模式,我们建议设置输入范围而不是调用 ImmSetConversionStatus。如果应用必须依赖每线程输入切换才能工作,则向用户提供一条消息,指示用户转到“控制面板”并进行上述更改。
资源
Get-WinLanguageBarOption
http://technet.microsoft.com/ library/hh852146
InputScopeNameValue 枚举
http://msdn.microsoft.com/library/system.windows.input.inputscopenamevalue(v=vs.110).aspx
.NET Framework 4.5 为默认值,.NET Framework 3.5 为可选
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
在 Windows 8 中,默认情况下启用 .NET Framework 4.5。Windows 8 默认情况下不包含 .NET 3.5,但作为一个可选功能,.NET 3.5 的文件可以在 Windows 8 安装介质上使用。
如果用户从 Windows 7 升级到 Windows 8,则会完全启用 .NET Framework 3.5 以确保计算机上的任何应用继续正常工作。
表现
如果用户执行 Windows 8 的全新安装,然后安装需要 .NET Framework 3.5(或 2.0)的应用,那么用户将触发所需 .NET 3.5 文件的请求。正常情况下,将从 Windows 更新下载缺少的文件(请求用户允许之后),但如果无法访问 Windows 更新,那么启用 .NET Framework 3.5 将会失败,除非已为缺少的文件指定备用源。
缓解操作
若要仅在具有 Windows 8 全新安装的测试计算机上启用 .NET Framework 3.5,请执行以下操作:
1. 将 \sources\sxs\ 从安装的操作系统内部版本 ISO 映像复制到 dotnet35 或类似文件夹。例如:
xcopy e:\sources\sxs\*.* c:\dotnet35 /s
2. 使用管理权限执行此命令行:
Dism.exe /online /enable-feature /featurename:NetFX3 /All /Source:c:\dotnet35 /LimitAccess
请注意,sources\SxS 文件夹不得用作重新分发机制,因为不支持此机制。
解决方案
对于客户来说:
Windows 8 包含一个机制,在尝试安装可重新分发的包时或需要 .NET 3.5 的应用程序安装程序调用可重新分发的包时,该机制可自动启用 .NET Framework 3.5。
对于应用开发人员(以及 IT 管理员)来说:
IT 管理员可以将 .NET 3.5 应用配置为在 .NET 3.5 或 .NET 4.5 上运行(取决于已安装的内容)。若要在 3.5 或 4.5 上运行托管的应用,只需在应用程序配置文件中添加一个部分。这将确保安装了 .NET 3.5 时,应用在 .NET 3.5 上运行;否则应用将在 .NET 4.5 上运行。下面提供了配置文件中其他部分的示例:
对于企业或 OEM 来说:
若要为 EEAP 内部版本或无法访问 Windows 更新的应用程序启用 .NET Framework 3.5,请执行以下操作:
1. 将 sources\sxs\ 从安装的操作系统内部版本 ISO 映像复制到 dotnet35 或类似文件夹。例如:
xcopy e:\sources\sxs\*.* c:\dotnet35 /s
2. 设置注册表项:
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Servicing]
“LocalSourcePath”=”c:\dotnet35”
对于企业来说:
对于配置为使用 WSUS 进行服务的计算机,你可以设置一个注册表项,以允许该计算机使用 Windows 更新来启用 .NET 3.5 而不是 WSUS(如果这样做,将仍然从 WSUS 进行服务)。
1. 设置注册表项:
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Servicing] “RepairContentServerSource”=DWORD(2)
还可以通过组策略设置该注册表项,以在启用 .NET 3.5 时绕过 WSUS 服务器。该策略位于“本地计算机策略 –> 计算机配置 –> 管理模板 –> 系统”下。选择设置“指定可选组件安装和组件修复的设置”。
如果你选择“直接联系 Windows 更新以下载修复内容而非 Windows Server Update Services (WSUS)”,则添加 Windows 功能(例如,.NET Framework 3.5)或修复功能的任何尝试都将触发从 Windows 更新下载文件。对于此选项,目标计算机需要 Internet 和 WU 访问。如果 WSUS 已配置为源,则正常的服务操作将继续使用 WSUS。
有关通过注册表项设置本地源位置的注意事项
IT 管理员可以通过注册表项为 .NET 3.5 文件设置本地源位置,以便用户可以使用“添加/删除 Windows 功能”对话框来启用具有缺失负载的功能,而无需指定源位置。可以通过组策略控制注册表项的值。
支持此注册表项:
项
类型
描述
LocalSourcePath
REG_EXPAND_SZ
默认情况下,要使用的本地源路径。可以指定多个路径,但这些路径应使用“;” 分隔。将按照指定位置的顺序搜索这些位置。
在 DISM 命令行上指定的本地源位置优先于在此注册表项中指定的位置。可以在此注册表项中指定文件夹位置。
可以使用 WIM,但路径必须是 WIM 文件;不需要装载它,例如:
wim:\\machine\share\file.wim:1
注意结尾处的 “1”。你必须指定要在 WIM 文件中使用的映像的数字索引。
对于已装载的 WIM,源路径需要引用已安装映像的 Windows 目录,而非引用装载点(例如:
/source:\windows rather than /source:)。
资源
实现基于注册表的策略
http://msdn.microsoft.com/library/aa374292(v=VS.85).aspx
启动默认的 Web 浏览器或 Windows 8 应用后,可能无法显示桌面应用
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
Windows 应用商店用户体验侧重于一次一个应用,Windows UI 提供的多任务、应用切换和通知。对于参与 Windows 8 用户体验的应用,Windows 应用商店应用的大小已调整为可填充屏幕上可用空间,同时提供最常用的全屏视图。因此,当启动系统上的另一个应用时,你可以不再假定该应用将与你的应用并排在桌面窗口中打开。这总是适用于选择参与 Windows 体验的 Windows 应用商店应用和浏览器。在某些方案中,你可能会同时看到其他应用,例如,如果你在桌面上并且启动其他桌面应用程序或者你有处于贴靠状态的应用程序。
表现
当桌面应用使用常用的应用激活技术(如对文件或协议使用 ShellExecute API)时,Windows 启动与该注册关联的应用,该应用可能是 Windows 应用商店应用和/或用户的默认 Web 浏览器(默认 Web 浏览器可能选择参与桌面或新 Windows 8界面)。Windows 8 应用使用全屏启动,隐藏桌面和桌面应用的启动位置。
注意:在 Windows 8 中,Internet Explorer 10 配置为默认浏览器,但用户可以选择安装其他浏览器并将其设置为默认浏览器(与 Windows 7 一样)。在Internet Explorer 10 中,当从桌面应用程序中打开链接时,将在桌面上打开 Internet Explorer。但是用户可以更改该设置,以便 Internet Explorer 作为 Windows 应用商店应用打开。我们鼓励浏览器供应商采用类似的“上下文启动”体验;但是开发人员应该针对“并非所有浏览器行为都相似”这一事实进行计划。
缓解操作
虽然开发人员不能对其应用进行任何更改以缓解此行为,但最终用户可以做一些事情,而你应当告知他们该做些什么。请考虑使用通过扩展的 ShellExecuteEx() API 收集的信息填充上下文对应的对话框。在该对话框中,向用户指示将启动哪个应用以及该应用是Windows 应用商店应用还是桌面应用。CLSID 可用于将 Windows 应用商店应用与桌面应用区别开来。用户选项:
使用宽屏显示器的用户可以将 Windows 应用商店应用贴靠到屏幕边缘以显示桌面,这样可以同时查看 Windows 应用商店应用和桌面应用。
如果将 Internet Explorer 配置为用户的默认浏览器,用户可通过在控制面板中更改“Internet 选项”来更改其行为。在“程序”选项卡上,用户可以更改 Internet Explorer 处理链接的方式。其他浏览器可能会提供相似的设置。
高对比度模式
平台
客户端 — Windows 8
服务器 — Windows Server 2012
描述
在以前的 Windows 操作系统中,高对比度模式被限制到在经典主题下运行的主题,不能直观设置其样式。在 Windows 8 和 Windows Server 2012 中,已经删除了经典模式,取而代之的是可以直观设置样式的高对比度主题。这项更改给你带来的主要好处之一是删除了在经典模式下运行的应用的单独代码路径。
开发人员仍然需要知道高对比度模式如何影响他们的应用以及如何开发样式完全不可知的应用。这个非常重要,因为虽然不正确地使用或采用主题颜色可能会导致应用在某个视觉样式(如 Aero)下表现正确,但那些同样的应用在高对比度模式下将无法正确响应。例如,在 Aero 中,文本始终是黑色的,突出显示颜色则是浅蓝色。但在高对比度黑色下,突出显示颜色是黑色的。如果你采用黑色文本,与在 Windows 8 以前的许多内置应用中一样,并使用系统默认设置进行突出显示,则用户将看到黑色背景上的黑色文本。在这些情况下,必须了解如何正确使用主题和系统指标,以使应用在所有样式下都能正常运行。
表现
在应用清单中不包含 Windows 8 标记的应用的工作区中未启用主题。因此,应用必须使用在经典主题的高对比度模式下呈现所需的代码路径来呈现工作区。
在高对比度主题中,应用的非工作区和工作区中都未启用主题。在应用清单中不包含 Windows 8 标记且使用 DwnIsCompositionEnabled() API 在窗口的非工作区进行绘制的应用中,也未启用主题。整个应用在经典主题的高对比度模式下呈现。
在清单中增加了对 Windows 8 的支持,但不使用视觉样式进行呈现(即它们对应用中的颜色或图像进行硬编码)的应用可能无法在高对比度主题下正确呈现。可能很难像在高对比度模式下一样阅读文本,或者可能不显示图像。
缓解操作
高对比度主题中的文本颜色已编写为符合 Microsoft 辅助功能指南。我们将前景与背景之间的高对比率保持为 14:1。如果默认启用的颜色不适合特定的最终用户,最终用户可通过针对那些高对比度主题中“窗口颜色”的控制面板设置轻松地自定义颜色。
在高对比度主题中,以下 UI 组件是可自定义的:
窗口背景颜色
文本颜色
超链接颜色
禁用的文本
已选定文本前景和背景颜色
活动窗口标题前景和背景颜色
非活动窗口标题前景和背景颜色
按钮前景和背景颜色
解决方案
如果在高对比度主题下在应用中看到意外行为,以下解决方案之一可能有用:
针对 Windows 8 显示应用: 应用清单中不包含 Windows 8 标记的应用呈现其工作区时不包含主题。所有内置应用都应当在应用清单中包含此项。添加 Windows 8 的 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38 GUID 值。
通过所有者绘制的 UI 使用视觉样式:
所有者绘制的控件应当遵循 MSDN 上的说明,以正确呈现控件部分和状态,包括文本。开发人员不应依赖设备上下文中指定的文本或背景颜色,以便使用非 UxTheme 方法进行呈现。如果讨论的主题没有主题部分,请使用具有相应指标的 GetThemeSysColor,并使用标准 GDI 方法绘制文本。如果没有一个 UxTheme 调用适用,请使用 GetSysColor 方法获取相应的指标。
选择文本颜色:
不使用硬编码的文本颜色,即使假设这种颜色适合所有常见方案。交付主题是通过相关指标支持高可见性的方式创建的。例如,COLOR_HIGHLIGHTTEXT 应在COLOR_HIGHLIGHT 作为背景时使用,COLOR_WINDOWTEXT 应在COLOR_WINDOW 作为背景时使用。如果这些关联存在例外,请在主题部分和状态定义自身中处理这些意外,而不是在代码中。设计高对比度 UI 时,该 UI 对于当前应用的高对比度主题应当是不可知的,这一点很重要,因为高对比度用户可以自定义其颜色。
响应 WM_ThemeChange 事件:
如果你的应用缓存从主题检索到的颜色或以非标准方式应用颜色,请为 WM_THEMECHANGE 添加重新计算存储的颜色值并重新绘制 UI 的消息处理程序。
编写高对比度 WWA 应用:
Web 应用不能访问 UxTheme API,但编写时仍然应该使用当前的系统指标作为 UI 的基础。以下是 WWA 开发人员可以利用以确保应用符合高对比度的资源:
· W3C CSS 颜色规范指定了使用系统指标而不是特定颜色的语法
· Internet Explorer 10 将添加对高对比度媒体查询的支持
· WWA 可以利用 IAccessibilityCapabilities::get_HighContrast() 方法检查高对比度的状态
对于经典应用中存在的主题部分,Windows 应用商店应用没有许多同样的问题,但你仍然要确保符合高对比度。默认情况下,Internet Explorer 会忽略用户定义的某些样式,而用符合高对比度的值取而代之。例如,background-image、background 和 color CSS 属性将被忽略。
如果你不希望 Internet Explorer 忽略你设置的任何属性,且你已经确保 UI 符合高对比度,则可以在父元素上设置新的 M3 CSS 属性 –ms-high-contrast: off。
编写高对比度 Windows 应用商店应用:
Windows 应用商店应用应当使用 SystemColors 类确定合适的 UI 元素颜色,请记住,有些系统指标颜色设计为一起使用,例如 SystemColors. WindowColor 和 SystemColors.WindowTextColor。这有助于获得卓越的高对比度体验。
在以前的 Windows 版本中正确检测高对比度:
在以前 Windows 版本上运行的应用没有访问新高对比度主题的权限,即使清单指定了与正在讨论的 Windows 版本的兼容性。同样,可能需要插入其他代码路径,以便在以前的 Windows 版本中使用的经典环境中处理呈现。在这种情况下,应当通过调用含 PI_GETHIGHCONTRAST 标记的 SystemParametersInfo 函数来检查高对比度的存在与否。这是用于检查高对比度存在与否唯一受支持的方法。
测试
测试应用时,请确保此应用在 Window 8 提供的所有内置主题中正常呈现:“Aero”、“基本”、“高对比度 1”、“高对比度 2”、“高对比度黑色”和“高对比度白色”。请确保高对比度主题中的文本清晰可见且易于阅读。
资源
Aero 样式类、部分和状态(新的基本主题和高对比度主题也使用这些状态)
http://msdn.microsoft.com/zh-cn/library/ee453680(VS.85).aspx
所有视觉样式公共的部分和状态
http://msdn.microsoft.com/zh-cn/library/bb773210(v=VS.85).aspx
通过自定义和所有者绘制的控件使用视觉样式
http://msdn.microsoft.com/zh-cn/library/dd373487(v=VS.85).aspx
GetSysColor 函数
http://msdn.microsoft.com/zh-cn/library/ms724371(v=VS.85).aspx
W3C CSS 颜色模块级别 3
http://www.w3.org/TR/css3-color/
SystemColors 类
http://msdn.microsoft.com/zh-cn/library/system.windows.systemcolors.aspx
SystemParametersInfo 函数
http://msdn.microsoft.com/zh-cn/library/ms724947(v=VS.85).aspx
Microsoft 辅助功能
http://www.microsoft.com/enable/
应用(可执行文件)清单
平台
客户端 — 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 中调用 Lock API 来锁定主要桌面视频缓冲区;执行此操作将导致出现错误,并返回主缓冲区的 NULL 指针。
即使桌面窗口管理器元素未启用,也会强制执行此行为。具有为 Windows 7 和更高版本声明的兼容性的应用不得锁定主要视频缓冲区进行呈现。
Windows Vista(默认):应用可以在主要视频缓冲区上获取锁定,因为旧应用依赖于此行为;运行此应用会关闭桌面窗口管理器。
对不含剪切窗口的主缓冲区执行的 DirectDraw 位块传送 (bitblt)
Windows 8 和 Windows 7:针对 Windows 7 和更高版本的 Windows 的应用被阻止对不含剪切窗口的主要桌面视频缓冲区执行 bitblt;执行此操作将导致出现错误,且不呈现 bitblt 区域。
即使你未启用桌面窗口管理器元素,Windows 也会强制执行此行为。具有为 Windows 7 和更高版本声明的兼容性的应用必须对剪切窗口执行 bitblt。
Windows Vista(默认):应用必须能够对不含剪切窗口的主缓冲区执行 bitblt,因为旧应用依赖于此行为;运行此应用会关闭桌面窗口管理器。
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 处理程序是否是使用相对路径参数调用的,如果是,则调用失败。
介绍此行为的公开文档指示此路径参数必须是绝对路径:ttp://go.microsoft.com/fwlink/?LinkId=228369
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:这是 Switchback 上下文的默认值
{35138b9a-5d96-4fbd-8e2d-a2440225f93a} 对于 Windows 7:在应用清单中设置此值的应用获取 Windows 7 行为
{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} 对于 Windows 8:在应用清单中设置此值的应用获取 Windows 8 行为
Microsoft 将根据需要为将来的 Windows 版本生成和发布 GUID。
已更新清单的 XML 示例:
注意:应用清单中的属性和标记名称区分大小写。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
在前一个示例中,所有操作系统的 GUID 提供下级支持。支持多个平台的应用不需要为各个平台提供单独的清单。
测试
应用可以指定多个受支持的操作系统 ID。如果你已测试或正在测试某操作系统上的应用,则应当添加此受支持操作系统 ID。Windows Vista 和以前的操作系统版本不会注意这些项。从 Windows 7 开始,Windows 将选择清单中的最高版本 GUID 直到正在运行的 Windows 版本,并向应用提供该级别的支持。
若要验证应用是否使用新应用清单兼容性部分:
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 行为正常工作。
资源
QueryActCtxW 函数
http://msdn.microsoft.com/library/aa375704(v=VS.85).aspx
UAC 清单
http://msdn.microsoft.com/library/bb756929.aspx
Windows 应用程序的应用程序清单
http://msdn.microsoft.com/library/aa374191(v=VS.85).aspx
桌面窗口管理器 (DWM)
http://msdn.microsoft.com/library/aa969540(v=VS.85).aspx
上下文不匹配更新
http://go.microsoft.com/fwlink/?LinkId=205035
程序兼容性助手
http://msdn.microsoft.com/library/bb756937.aspx
以队列形式呈现的模型已弃用
平台
客户端 — Windows 8 后的版本
服务器 — Windows Server 2012 后的版本
描述
在 Windows 8 后的 Windows 版本中,以下 API 将返回 E_NOTIMPL:
· DwmSetPresentParameters
· DwmSetDxFrameDuration
· DwmModifyPreviousDxFrameDuration
另外,以下 API 将仅接受 hwnd 参数的 NULL 值:
· DwmGetCompositionTimingInfo
我们将停止支持 hwnd != NULL 的 DwmGetCompositionTimingInfo,并将删除相关的功能。如果为 hwnd 指定了非 NULL 值,此 API 将返回 E_INVALIDARG。
我们也不赞成使用 DwmGetCompositionTimingInfo API,建议开发人员转为使用 DXGI 翻转模型和相关的 DX 显示统计信息 API。
表现
使用以队列形式呈现的模型的应用无法正常运行。确切的表现取决于特定应用程序,但表现范围有显示时间不正确到应用异常退出。在实际中,我们不希望看到很多(如果有)这样的应用。Vista Media Player 使用了这种模型,但 Windows 9 上将不再使用此模型(以及可能在旧的 Zune 播放器上)。目前,我们没有实际使用此模型的任何其他应用程序的信息。
解决方案
开发人员需要使用 DXGI 翻转显示模式,而不是以队列形式呈现(在 Windows 7 起的 DX9 运行时上可用,且在 Windows 8 中的 DX10 和 DX11 运行时上可用).
测试
运行常规测试,以确保内置 Windows 组件和主要产品在将来的 Windows 版本上继续运行。
Windows 8 的程序兼容性助手方案
平台
客户端 — Windows XP | Windows Vista | Windows 7 | Windows 8
描述
程序兼容性助手 (PCA) 是 Windows 8 中的一项功能,可帮助最终用户运行为早期的 Windows 版本设计的桌面应用。Windows 8 有很好的内置应用兼容性,这样为 Windows 7 或更早 Windows 版本设计的应用都可以自动在 Windows 8 上很好地运行。但是,有很少数的应用需要干预,否则可能无法运行。
当用户运行某个应用时,PCA 会跟踪该应用,并标识 Windows 8 中某些已知兼容性问题的所有症状。当它检测到任何问题症状时,将向用户提供一个应用所建议修复的机会,该修复有助于在 Windows 8 上更好地运行该应用。
方案
PCA 针对 Windows 8 中的一组已知兼容性问题跟踪应用。PCA 跟踪问题,标识修复,并向用户提供含有应用建议修复说明的对话框。用户可以决定是应用建议的修复,还是选择不应用并取消建议操作。如果用户取消,PCA 将不再跟踪该应用。
PCA 通常应用三个 Windows 兼容性模式之一 — Windows XP SP3、Windows Vista SP2 或 Windows 7,具体取决于程序(或其安装程序)的编写时间。PCA 使用程序的 LINK_DATE 和 SUBSYSTEM VERSION 属性以及可执行文件清单的 TRUSTINFO 和 COMPATIBILITY 部分确定与哪种模式相关,然后相应地应用 Windows XP SP3(包括管理权限)、Windows Vista SP2 或 Windows 7。文档末尾的术语表列出了 PCA 应用的每个兼容性模式及其描述。
对于下面列出的所有方案,PCA 在应用修复后会再次跟踪应用。如果在应用兼容性修复后,应用仍然因为相同的原因失败,则 PCA 会还原该修复。PCA 随后将永久停止跟踪失败的特定应用。
虽然 PCA 会跟踪许多潜在的问题,但实际上并非所有问题都会导致应用失败。仅当由于 Windows 兼容性原因导致应用很有可能失败时,PCA 才会建议修复。以下各个部分详细介绍了在 Windows 8 中开发的各个 PCA 方案。每个部分介绍了问题方案和 PCA 提供的能让应用在 Windows 8 中继续正常运行的建议。
若要了解有关 Windows 8 中兼容性更改的详细信息,请参考“Windows 8 兼容性手册”中的其他主题。
PCA 跟踪并建议修复的方案有:
· 应用无法安装或卸载
· 应用无法运行,并出现 Windows 版本检查消息
· 应用因管理权限无法启动
· 应用因特定内存问题崩溃
· 应用因系统文件不匹配失败
· 应用因 64 位 Windows 上出现未处理的错误失败
· 应用在尝试删除受保护的非 Windows 文件时失败
· 应用在尝试修改 Windows 文件时失败
· 应用因使用 8 或 16 位颜色模式失败
· 应用因图形或显示问题失败
· 应用无法声明 DPI 感知
· 应用因缺少 Windows 功能失败
· 应用因 64 位 Windows 8 中的未签名驱动程序失败
· 通过兼容性设置跟踪安装的应用
· 应用无法启动安装程序或更新程序
· 需要使用管理权限运行的应用安装程序
· 需要使用管理权限运行的旧控制面板小程序
下面将详细介绍所有这些方案:
应用无法安装或卸载
这是安装应用过程中最常见的应用失败类型之一。旧安装程序最常见的两种失败情形是:
· 安装程序不了解 Windows 8 中的用户帐户控制 (UAC) 功能,因此可能无法使用对 Windows 8 的保护区域进行系统更改所需的全部权限运行
· 安装程序会检查 Windows 版本,如果检查到的版本高于它预期的版本,它将自行停止运行
这些失败的情形是安装过程中最常见的两种兼容性失败。PCA 在其他各种 Windows 组件(如 UAC)的帮助下,在启动时检测安装程序,并跟踪程序直到安装结束。如果安装程序无法在 Windows 控制面板的“添加删除程序”部分添加文件或添加有效条目,则 PCA 将视安装已失败。
在这种情况下,PCA 会建议一个适合应用的兼容性模式。兼容性模式使安装程序能够在设计它时所针对的 Windows 模式下运行,并能确保应用使用管理权限运行。PCA 会应用 RUNASADMIN 兼容性模式及相应的 Windows XP、Windows Vista 或 Windows 7 兼容性模式。在失败的安装结束时,用户将看到含有 PCA 建议的对话框:
用户随后可以选择:
· 使用兼容性设置(建议的选项)运行程序,PCA 随后应用建议的设置(兼容性模式),重新启动安装程序,然后跟踪程序直到安装成功完成
· 指示程序正常安装,在这种情况下,PCA 将不再添加任何设置,并将停止跟踪安装
· 单击“关闭”,在这种情况下,PCA 将不再添加任何设置,并将停止跟踪此安装
当用户尝试从 Windows 的“添加删除程序”部分或从应用的卸载程序快捷方式卸载应用时,也可以使用同样的机制帮助卸载应用。
应用无法运行,并出现 Windows 版本检查消息
在应用运行时出现的最常见兼容性失败之一是由于 Windows 版本检查。许多应用会在启动时检查 Windows 版本;如果应用不能识别检查到的版本,即使应用可以正常运行,也会自行停止运行。
一般情况下,这种检查与 PCA 跟踪的两个条件相关:
· 应用显示警告用户的消息框。示例如下所示:
· 应用立即终止或崩溃
如果 PCA 标识应用的这两个条件,它将向用户提供建议。PCA 将允许用户使用兼容性设置重新运行应用。PCA 将根据应用使用相应的 Windows XP、Windows Vista 或 Windows 7 兼容性模式。和在所有方案中一样,用户可以告诉 PCA 应用正常运行,也可以单击“关闭”按钮取消建议的设置。提供的对话框示例如下所示:
应用因管理权限无法启动或运行
有些应用需用管理权限才能运行和执行其功能。但是在 Windows 8 中,与在 Windows 7 和 Windows Vista 中相似,由于 UAC,应用默认以较低的权限等级来运行。为 Windows Vista 和更高版本设计的新应用一般会使用 EXE 清单的 TRUSTINFO 部分声明其运行所需的权限等级。但是,旧应用的失败一般有两种情形:
· 应用向用户显示它需要管理权限的消息,如下所示:
· 应用立即终止或崩溃
如果 PCA 标识应用的这两个条件,它将向用户提供建议。PCA 将允许用户使用管理权限重新运行应用(PCA 应用 RUNASHIGHEST 兼容性模式)。在应用重新运行时,用户将看到 UAC 提示。和在所有方案中一样,用户可以选择使用建议的设置重新运行,也可以单击“关闭”取消建议的设置。提供的对话框示例如下所示:
应用因特定内存问题崩溃
有些应用会因为众所周知的内存问题崩溃。应用会从内存中取消对某个 DLL 的引用,然后调用一个函数执行相同 DLL 中的代码。这会导致应用立即崩溃。虽然此问题不是由于 Windows 8 兼容性更改才出现,但它是很多应用中相对常见的问题。PCA 会跟踪此问题,以便向用户提供更可靠地运行其应用的机会。
对于这些应用,PCA 会在无任何提示的情况下自动应用 PINDLL 兼容性模式。PCA 调用的兼容性模式会阻止应用从内存释放该 DLL。因此,应用对该 DLL 的函数调用将发挥作用,从而阻止应用崩溃并使它继续正常运行。
应用因系统文件不匹配失败
有些为 Windows XP 及更低版本设计的应用中包括 Windows 系统 DLL 的副本及其安装程序。安装此类应用时,应用在自己的文件夹中保存旧的 DLL 副本,同时在 Windows 系统文件夹中保存最新版本的 DLL。
在 Windows Vista 和更高版本中,这种情况会导致应用在尝试加载本地 DLL 时失败,因为此 DLL 无法与当前 Windows 系统 DLL 的其余部分很好地一起运行。由于应用通常不能识别此 DLL 的更新版本,因此无法正常工作。
当 PCA 检测到此 DLL 无法正常加载时,它将应用一个允许 Windows 从 Windows 系统文件夹中加载最新版本 DLL 的兼容性设置,以便应用可以正常运行。
在应用第一次运行失败结束时,用户将看到通知他们已应用设置的 PCA 对话框,如下所示:
应用因 64 位 Windows 上出现未处理的错误失败
在 Windows 8 的 64 位版本上,对消息循环回调机制启用了一个新例外。虽然此例外在 Windows 7 中第一次引入,但不是必须使用它处理此错误。在 Windows 8 中,使用消息循环的应用必须处理此新例外。如果不处理,则应用会崩溃。为旧版本 Windows 设计的应用可能无法识别此例外,因此可能无法正确处理此错误(例外)。
PCA 检测到由于此未处理的错误失败的应用后,将对应用自动使用 DISABLEUSERCALLBACKEXCEPTION 兼容性模式。在运行结束时应用此设置后,用户将收到如下通知。应用在下一次运行时将使用此模式,并可避免发生此错误。
应用在尝试删除受保护的非 Windows 文件时失败
一些为 Windows XP 和更低版本设计的应用会假定它们通常使用完全管理权限运行。作为正常应用行为的一个过程,它们可能会尝试删除受保护的非 Windows 文件(程序文件或 Windows 文件夹中)。删除操作失败时,许多这种应用会崩溃。
PCA 检测到这些无法删除受保护文件并崩溃的应用后,将向用户提供建议。PCA 将允许用户使用兼容性设置重新运行应用。和在所有方案中一样,用户可以告诉 PCA 应用正常运行,也可以单击“关闭”按钮取消建议的设置。在这种情况下,PCA 将应用VIRTUALIZEDELETE 兼容性模式。提供的对话框示例如下所示:
应用在尝试修改 Windows 文件或注册表项时失败
一些为 Windows XP 和更低版本设计的应用会假定它们通常使用完全管理权限运行。作为正常应用行为的一个过程,它们可能会尝试修改、删除或写入 Windows 保护文件(程序文件或 Windows 文件夹中)或 Windows 拥有的注册表项。写入、删除、修改文件或注册表项的任一操作失败时,许多这种应用会崩溃或出现严重故障。
PCA 检测到这些无法写入受保护的 Windows 文件或注册表项的应用后,将在应用退出时向用户提供建议。PCA 将允许用户使用兼容性设置重新运行应用。和在所有方案中一样,用户可以告诉 PCA 应用正常运行,也可以单击“关闭”按钮取消建议的设置。在这种情况下,PCA 将应用 WRPMITIGATION 兼容性模式。提供的对话框示例如下所示:
应用因使用 8 或 16 位颜色模式失败
作为重构适用于 Windows 应用商店应用的 Window 8 的一部分,其中一个重要变化是桌面窗口管理器 (DWM) 现在在 Windows 8 中仅支持 32 位颜色。现在将模拟位数较低的颜色模式。
许多为 Windows XP 或早期版本设计的旧应用和游戏使用 8 位或 16 位颜色模式。如果没有缓解操作,这些应用将无法在 Windows 8 中执行。但是,当这些应用枚举或尝试使用任何 8 位或 16 位颜色模式进行显示时,PCA 会立即标识出问题,并借助 DWM 的帮助,确保应用在模拟的颜色模式下正常运行。
请注意,当应用请求低颜色模式时,会立即发生此操作,且此操作对用户是透明的。用户不必重新启动应用以进行此缓解操作,因为始终需要用此修复来确保应用正常运行。
应用因图形和显示问题失败
由于桌面窗口管理器 (DWM) 在 Windows 8 中始终处于打开状态,因此,如果应用使用混合模式图形 API(像使用 GDI 和 DirectX API 时)绘制到屏幕上(主要是旧游戏),并尝试使用全屏模式,有些旧 Windows XP 时代的应用可能会失败:
· DWM 将阻止直接绘制到桌面,游戏或应用将失败,或者在桌面上绘制黑屏,使所有图形都不可见
· 在这些情况下,当应用退出时,Windows 会检测到应用或游戏有全屏模式问题,并应用 DXMAXIMIZEDWINDOWEDMODE 兼容性模式,从而允许应用或游戏在最大化窗口模式而不是全屏模式下运行
· 在运行结束时应用设置后,用户将收到 PCA 的如下通知;应用将在下一次运行时进入兼容性模式,并将能够正常运行
应用无法声明 DPI 感知
当 Windows 和应用在高 DPI 模式下运行,但应用不通过其 EXE 清单声明其对高 DPI 的感知时,许多旧应用会发生另一个典型的显示问题。由于设置中出现这种不匹配而发生的常见问题有,被剪切的 UI 元素或文本和不正确的字体大小。有关这些问题的详细信息,请参阅此处的链接。
在这些情况下,Windows 在检测到该应用是高 DPI 感知应用后,将在第一次运行结束时向该应用使用 HIGHDPIAWARE 兼容性模式。PCA 随后将向用户通知此消息,如下所示:
应用因缺少 Windows 功能失败
有些应用依赖从 Windows Vista 起即被删除的 Windows 功能。当这些应用尝试加载缺少的 DLL 或 COM 组件时,它们将无法运行。
当应用尝试加载缺少的 Windows 功能时,PCA 将检测到这些应用,并提供在应用终止后下载并安装这些组件的建议。用户可以单击“在线获取帮助”查找替代功能或下载并安装此功能。如果需要,用户可以选择不执行任何操作,单击“关闭”即可。
应用因 64 位 Windows 8 中的未签名驱动程序失败
从 Windows Vista 开始,64 位 Windows 需要数字签名的驱动程序(SYS 文件)。但是,为 Windows Vista 之前的版本设计的旧应用附带未数字签名的驱动程序。如果安装这些未签名的驱动程序,Windows 将不加载它们。在极少数情况下,如果将这些驱动程序标记为启动时驱动程序,则 Windows 可能不会启动。
有些旧程序安装未在 64 位 Windows 上签名的驱动程序。任何尝试使用此驱动程序的设备或应用将失败或导致系统崩溃。为防止出现这种情况,PCA 会在应用安装未签名驱动程序时检测到它们,并禁用标记为启动时驱动程序的驱动程序。
它还会指示用户获取数字签名的驱动程序,以使应用正常运行。下面是安装驱动程序和应用后显示的消息。如果另一个应用安装相同的驱动程序,此应用也将收到相同的消息。
通过兼容性设置跟踪安装的应用
当某个安装程序失败时,PCA 会使用各种兼容性模式帮助安装程序,具体取决于失败的类型。使用兼容性设置的安装程序成功后,PCA 将跟踪此安装程序添加的快捷方式。这样做是为了跟踪已安装的应用是否也需要应用于其安装程序的兼容性设置。
当用户启动此类应用时,PCA 会提示用户,询问应用是否正常运行。如果用户回答“是”,PCA 会停止跟踪此应用。如果用户回答“否”,则 PCA 将应用已对此应用的安装程序使用的同一兼容性模式,并使用所应用的兼容性模式重新运行此应用。
应用无法启动安装程序或更新程序
应用有时会启动需要以管理员身份运行的子程序。当应用尝试启动其更新软件以检查和安装应用的新更新时,通常便是这种情况。当应用直接运行此类子程序时,子程序可能无法启动,因为应用自身不具备管理权限,或因为未使用 UAC 清单将子程序正确标记为进行提升。
PCA 会跟踪这些错误,并在主要应用关闭时自动应用有助于子程序正常运行的 ELEVATECREATEPROCESS 兼容性模式。当应用在后续运行时启动子应用时,用户将看到子程序的 UAC 对话框。
PCA 对话框的示例如下所示:
需要使用管理权限运行的应用安装程序
Windows 桌面应用的安装程序需要管理权限,因为它们要向受保护的系统区域写入文件、文件夹和注册表项。Windows (UAC) 有标识安装程序何时运行的检测逻辑,并通过 UAC 对话框立即提示用户提供管理权限。但是,在某些情况下,此逻辑将无法确定某个应用是否确实为安装程序,且可能无法获取管理权限。这些通常是未使用已知安装技术(如 Windows Installer 或 Install Shield)定制的安装程序。
在这些情况下,PCA 会检测到安装程序无法写入其文件。最后,如果安装失败,PCA 将提供应用兼容性设置的建议。如果用户选择单击“运行程序”,PCA 将应用 RUNASADMIN 兼容性模式,并重新运行安装程序。如果用户选择关闭,则不应用任何设置。PCA 对话框的示例如下所示:
需要使用管理权限运行的旧控制面板小程序
控制面板小程序通常更改系统设置,并需要运行 AD 管理员的能力。但是,那些在 Windows Vista 前编写的小程序没有 EXE 清单,或没有声明其所需权限等级的 TRUSTINFO 部分。
运行此类小程序时,PCA 会检测到它们,并在第一次运行结束时提供使用管理设置运行的建议。如果用户选择单击“运行程序”,PCA 将应用 RUNASADMIN 兼容性模式,并重新运行安装程序。如果用户选择关闭,则不应用任何设置。PCA 对话框的示例如下所示:
通过用户反馈验证建议的设置
在每个方案结束时(使用建议的兼容性设置运行应用后),PCA 将向用户提一个简单的问题:
用户可以提供反馈,说明应用使用兼容性设置后正常运行还是失败。此数据将匿名发送给 Microsoft。这有助于确保通过 Windows 更新过程将此类修复内置到 Windows 8,以便将来的 Windows 8 用户不会再遇到同样的应用失败,PCA 也将无需跟踪应用是否出现同样的失败。
跟踪无建议的问题
由于兼容性原因,应用可能会有多种不同的失败方式。PCA 跟踪的兼容性问题比上述方案中列出的问题更多。在这些情况下,很多时候问题的表现取决于应用。这意味着有些应用会正常地处理此类问题并从中恢复,而有些则不会这样。因此,对于此类问题,虽然 PCA 仍会跟踪应用,但不会直接提供修复建议。
PCA 跟踪但没有建议设置或对话框的问题包括以下应用:
· 运行时非常短 — 应用运行的时间不超过三秒
· 在没有管理权限的情况下创建全局内存对象
· 启动时出现错误(Win32 异常)
· 检查管理权限(但可能不会失败)
· 使用 Indeo 编解码器(自 Windows Vista 起已弃用)
· 尝试在受保护的注册表位置(如 HKLM)写入或删除注册表项
· 启动时崩溃
通过兼容性选项卡和兼容性疑难解答应用修复
如上所述,应用可能会因多种兼容性原因失败。并非所有失败都有明确的 PCA 建议,因为设置与应用相关。但是,用户可以进入“兼容性疑难解答”或“兼容性”选项卡应用某些常见修复,以尝试使失败的应用在 Windows 8 上能够正常运行。在这些情况下,PCA 仍将在应用修复前后跟踪应用的兼容性问题。当应用在进行修复后运行时,PCA 将询问用户修复是否有效。用户回答问题后,数据将通过遥测匿名发送给 Microsoft。此数据从许多用户处收集而得,进行分析,然后通过 Windows 更新将有用的修复广泛分发给所有 Windows 8 用户。
使用兼容性疑难解答
兼容性疑难解答是 Windows 中的一个机制,允许你诊断应用问题并应用建议的修复,以使它们可以正常运行。仅当 PCA 未对应用提供任何建议时,才需要使用疑难解答。
疑难解答会指引用户回答一组问题,并根据用户的回答应用一组修复,并允许用户测试应用和验证修复。验证完成后,修复将永久应用于应用,以使应用在 Windows 8 上更好地运行。
疑难解答 UI 如下所示以供参考:
可以使用以下两种方式启动兼容性疑难解答:
· 从“开始”屏幕:
1. 类型:兼容性疑难解答
2. 在“设置”部分下,单击“运行为以前版本的 Windows 编写的程序”磁贴
· 从应用磁贴:
1. 在“开始”屏幕上,右键单击应用磁贴。
1. 单击“打开文件位置”(仅桌面应用适用)
1. 在资源管理器功能区中,单击“应用”选项卡
1. 选择“兼容性疑难解答”
使用“兼容性”选项卡
请注意,仅建议希望尝试不同兼容性设置的专家级用户使用此选项卡。此方法不提供可用于应用的任何类型的修复建议。在这里,用户希望了解应用哪些修复可以使应用正常运行。如果不确定修复是否有效,请使用兼容性疑难解答查找适合应用的修复。
若要访问“兼容性”选项卡:
· 从“开始”屏幕:
1. 右键单击应用磁贴
4. 打开文件位置(仅桌面应用适用)
· 从资源管理器功能区:
1. 单击“属性”
6. 导航至“兼容性”选项卡
7. 选择兼容性修复
8. 重新运行应用请注意,你也可以再次回到相同的位置更改或删除修复。你也可以使用选项卡上提供的按钮向计算机上的所有用户应用修复。
具有已知兼容性问题的应用
除了上面列出的运行时问题检测方案,如果应用有已知的兼容性问题,PCA 还会在应用启动时通知用户。列表存储在系统应用兼容性数据库中。这些消息有两种类型:
· 硬阻止消息 — 如果已知应用不兼容却允许运行该应用,将导致对系统产生严重影响(例如,Windows 崩溃或在安装后无法启动),并显示如下所示的阻止消息。
· 软阻止消息 — 如果应用具有已知的兼容性问题并且可能无法正常工作,则会显示该消息:
在这两种情况下,“获取联机帮助”选项会发送 Windows 错误报告,以联机获取 Microsoft 的响应并将该响应显示给用户。通常,这些响应会将用户指向以下三种资源类型之一:
· 来自应用供应商的更新
· 用于获取更多信息的应用供应商的网站
· 用于获取更多信息的 Microsoft 知识库文章
PCA 的遥测
PCA 解决 Windows 8 计算机上的任何应用问题并获得所有用户反馈之后,它将收集有关应用、安装程序、检测到的问题以及应用于应用的兼容性设置的匿名数据,然后将该数据发送回 Microsoft。该数据是从愿意提供此类匿名数据(通过客户体验改善计划 — CEIP)的任何用户收集的。收集该数据之后,分析应用故障和修复,然后通过 Windows 更新机制将修复分发到整个 Windows 生态系统,以便将来该应用的任何用户自动从修复中获益。
管理控制和管理 PCA 设置
IT 管理员可以采用两种方法控制 PCA 行为:
· 禁用 PCA — 该设置允许 IT 管理员禁用 PCA 向用户显示的对话框;PCA 将仍然跟踪和检测问题并且发回遥测数据
· 禁用应用遥测 — 该设置将禁用 PCA 对遥测数据的任何收集和发送请注意,如果禁用 CEIP,则该设置没有任何影响。
设计使用 PCA 的应用
开发人员需要确保他们的应用在上述的各种兼容性方案之间运行良好。开发人员必须针对上面的每种方案对应用进行测试和验证,并确保没有任何兼容性问题。如果确定了兼容性问题,则开发人员应该对他们的应用进行所需的修复,以确保兼容性问题得到解决。开发人员应该进行的一些常见修复包括:
· 取消安装和运行时的 Windows 操作系统版本检查
· 取消权限检查(检查管理员访问权限);使用 EXE 清单声明所需权限的正确级别
· 确保应用安装工具中未附带 Windows 二进制文件
· 取消对受保护区域(注册表、文件夹)的写入或�