Windows 7社区发布活动 -- Windows 7兼容性概述
今天在深圳的Windows 7社区发布活动讲了Session 2 -- Windows 7兼容性概述。今天参会的人员达到60多个,大家也非常积极的讨论。我的Session时间安排上有点紧张,没有留给大家提问的时间,最后由朱兴林回答在几个Session结束后统一回答大家的问题。在抽奖环节,我抽取一等奖的奖品-- windows 7,得主是位女生,各位得主最后有张合影。
我的PPT下载Win7应用开发兼容性.zip
下面简要介绍一下今天的内容:微软的操作系统更新换代仍然按照自己的步伐,从XP到2003、vista再到现在的Windows7,基本是同期2个版本过渡4年,后一个基本是前一个升级版,因此Windows 7实际上是Vista的一个升级版,核心还是沿用Vista SP1。
新操作系统下一些应用程序总会出现一些兼容性的问题,基于win7和vista之间的亲密关系,探讨win7系统兼容性测试,可以先从vista系统开始。
1、运行权限UAC:Vista比XP在很多方面都更安全,比如说抛弃了AppInit_Dlls这个注册表键值,基于用户账户控制(UAC)的安全防护,诊断工具自动监视、新的内核补丁保护(KPP)技术等,这些措施虽然让系统更安全和不容易遭受攻击,却导致许多软件在启动运行时因为权限的分配或系统检查验证的不兼容而出现很多问题。而且UAC经常导致用户确认提升权限,特别是像开发人员这类的用户,开发人既是一个普通人员,更多时候需要管理员的权限运行,导致有非常差的用户体验。Windows 7通过扩展UAC为4级,和Vista的只有两级的配置来说,大大改进了用户体验。
2、文件与注册表虚拟化技术:Vista系统采用了文件与注册表虚拟化技术,它可以使某些在旧版 Windows中必须要求管理员权限的应用程序以非管理员的权限运行(为每个用户帐户分别建立一套应用程序所需的文件与注册表副本。例如:某应用程序需要以管理员权限添加 %Program Files%\程序名称\设置.INI,在使用非管理员权限时,此文件就会自动重定向至 Users\%用户帐户名%\AppData\Local\VirtualStore\Program Files\程序名称\设置.INI;注册表也是一样,应用程序需要以管理员权限修改 HKEY_LOCAL_MACHINE\SOFTWARE\程序名\,使用非管理员权限时,此注册表项就会自动重定向至 HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore\MACHINE\Software\程序名\ 注册表项),提升系统安全性。然而并非所有的应用程序都可以完美地支持 Windows Vista 的文件与注册表虚拟化技术,所以在实际应用中可能会遇到各种各样问题,主要有:
2.1、某些应用程序可以以文件与注册表虚拟化方式运行,但需要重新定位通过此应用程序生成的文件。
假设某图像编辑程序可以以文件与注册表虚拟化方式运行,在这个程序中将新图像文件保存至 %ProgramFiles%、%SystemRoot% 等位置后,通过资源管理器却无法在这些位置找到刚生成的文件。这时只能通过到 Users\%用户帐户名%\AppData\Local\VirtualStore 文件夹搜索刚生成的文件。
2.2、某些应用程序可以以文件与注册表虚拟化方式运行,但其升级或卸载程序却不支持文件与注册表虚拟化。
这个问题常见于某些需要经常升级版本的旧版安全防护软件,这些安全软件能够以文件与注册表虚拟化方式运行,但在执行软件升级时却无法将更新的文件保存至 %LocalAppData%\VirtualStore 文件夹、也无法将更新的注册表项添加至 HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore。这时,就可能会引起升级失败,或者虽然提示升级成功、但软件版本并没有提升的问题。解决这一问题需要以管理员的身份将更新的新文件及新注册表项添加至 %LocalAppData%\VirtualStore 文件夹及 HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore 注册表项。
卸载的问题也是一样,某些应用程序虽然可以以文件与注册表虚拟化方式运行,但卸载时却无法自行删除 %LocalAppData%\VirtualStore 文件夹中的有关数据及 HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore 中的有关注册表项,需要以管理员的身份执行清理。
2.3、某些应用程序必须安装在 %ProgramFiles% 中才可以支持文件与注册表虚拟化技术。 这些应用程序安装在非 %ProgramFiles% 文件夹外的其它文件夹时无法应用虚拟化技术、在安装或使用过程中经常出错。
2.4、某些应用程序完全无法以文件与注册表虚拟化技术正常运行。如果我们在安装、升级或使用应用程序时遇到 FileCreateVirtualExclude 事件,即在事件查看器展开“应用程序和服务日志”-“Microsoft”-“Windows”-“UACFileVirtualization”-“Operational”发现事件 ID 为 5000 的 FileCreateVirtualExclude 事件,则表示这个应用程序可能部分或者完全不支持文件与注册表虚拟化技术,必须以管理员权限才能在 Windows Vista 中运行。具体的表现有:无法建立或者找到程序所需的文件夹或文件、写入/复制/加密/压缩某文件夹或文件时出错、应用程序因为无法访问所需的数据而经常提示未知错误,等等。
3、系统服务Session 0 问题:在Windows 7中,操作系统服务的Session 0隔离,阻断了系统服务和用户桌面进程之间进行交互和通信的桥梁。通过Session 0隔离,虽然可以让操作系统更加安全,但是也给系统服务带来了不少兼容性的问题。在Windows XP,Windows Server 2003以及其他更早期的Windows操作系统中,所有操作系统服务和应用程序都在相同的session中运行,这个session由第一个登陆系统的用户所启动。这个session被称为Session 0。在Session 0中同时运行系统服务和应用程序会给操作系统带来一些安全风险,因为服务运行在一个更高的用户权限下,这就使得系统服务成为那些想要提升自己权限的病毒或者恶意软件的攻击目标。从Windows Vista开始,系统服务开始运行在一个被称为Session 0的特殊session中。而应用程序则被跟系统服务隔离开来,这是因为应用程序运行在由用户登录系统后创建的一系列session中。比如,Session 1对应于第一个登陆的用户,Session 2对应于第二个登录系统的用户,以此类推。各个Session之间是相互独立的。在不同Session中运行的实体,相互之间不能发送Windows消息、共享UI元素或者是在没有指定他们有权限访问全局名字空间(并且提供正确的访问控制设置)的情况下,共享核心对象。虽然Session 0隔离可以使得操作系统更加安全,但是,有时候运行于Session 0的系统服务和运行于其他Session的进程之间进行交互和通信时必须的。就像大禹治水,我们不能仅仅把Session 0隔离起来就万事大吉了,我们还需要采用疏导的方式,用更加安全的方式完成Session 0和其他Session之间的交互和通信。
4、程序安装问题:Windows 7 只支持MSI格式的安装程序,MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。2000年,Windows Installer开始进入安装标准化阶段, 目前,为Windows 2000开发的大多数应用程序以前都是针对Windows NT 4或Windows NT 3.51,并且可能是依赖16位组件或NT驱动模式。这些旧式程序为Windows 7的兼容性带来了巨大的挑战。
5、浏览器兼容性问题:很多程序在xp/vista下的IE8没问题,到了win7下就出现问题。Windows 7调用的是内置的IE 8组件。而IE 8合作伙伴版本只会集成到Windows XP Service Pack 2和SP3, Vista/SP1, Windows Server 2003 SP2 和Windows Server 2008/SP1中。所以在win7下的兼容性测试,浏览器兼容是需要重点关注的。
实际上,Windows 7就是Windows Vista的一种升级进化版本。除去测试版本本身的系统问题和相关的硬件驱动程序支持不够,本身自带的IE、DirectX等特性外,软件兼容性测试需关注的点和Vista基本相同。从目前桌面产品在win7下的兼容性测试结果来看,对Vista系统支持比较好的软件,对win7系统的支持也都没什么问题。
2009年9月1日,微软携手众多合作伙伴展示了WINDOWS7在兼容性方面的进展。据介绍,截至到目前为止,国内市场已经有91%的应用程序、92%的硬件设备和95%的网站已经实现了与WINDOWS7的良好兼容。
欢迎大家扫描下面二维码成为我的客户,扶你上云