Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79980
  • 博文数量: 21
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-29 10:03
文章分类
文章存档

2010年(21)

我的朋友

分类: WINDOWS

2010-08-17 11:24:24

关于windows程序的兼容模式
1、什么是兼容模式?为什么要使用兼容模式 ?
一般来说,应用程序都会针对某个特定的操作系统或者操作系统版本进行优化处理。当用户试图在新版本的Microsoft Windows 操作系统上运行比较老的应用程序时,就有可能产生程序兼容性问题,因为这个程序最初不是为这个较新的操作系统特别编写的。
例如:运行在 Windows 早期版本上的应用程序可能无法在 Windows XP Professional 正常运行。出现这种情况的部分原因在于:
? 当 Windows 报告了新的、更高的操作系统版本号时,应用程序无法运行。通常,只要用户消除了这个障碍,应用程序就能很好地在 Windows 的新版本上运行了。
 
? 应用程序调用了较旧版本的 Win32 API 函数,从而在具有大量资源(比如:可用的磁盘空间)的计算机上返回了意外的值。
 
? 应用程序需要较旧格式的 Windows 数据。
 
? 应用程序需要用户信息(比如:个人及临时文件夹)位于特定的位置或采用特定的格式。
这些问题可能导致程序无法执行,或者无法得到正常的结果。为了能在xp、2003、vista上正确运行一些早期的程序,我们需要在设置其兼容模式——一种特殊的运行环境,在这种环境下,操作系统模拟程序运行所需要的一些早期环境来达到正确运行的目的。
兼容性模式
兼容性模式又被称作“层”,从本质上说,它是一个兼容性修补的集合,模拟了一个特定的操作系统环境供程序运行使用。例如, Windows 95兼容性模式就包含了大约50个最常见的兼容性修补,通过这些修补,老的Windows 95程序就可以在Windows XP上正常运行。其中的部分修补包括:返回Windows 95版本凭证;精确模拟Windows 95/Windows 98/Windows Me 的堆管理器;将Windows 95/Windows 98/Windows Me的桌面和开始菜单重新定向到Windows XP“Documents and Settings”下的相应文件夹的文件路径修补;以及对注册表进行虚拟化,以模仿Windows 95/Windows 98/Windows Me的注册表数据。
兼容性模式存在三种不同的类型:
最终用户模式,该模式通过Windows XP/2003/Vista中各种不同的外壳特性得以显现,例如“兼容性”选项卡或者程序兼容性向导。用户可以通过该界面访问5种基本的兼容性模式:Windows 95、Windows 98/Windows Me、Windows NT 4.0、Windows 2000、Windows XP。
系统模式,该模式除了包括上面列出的所有最终用户模式之外,还提供了几个其它的选项,独立软件开发商(ISV)、系统管理员和其它IT人士可以利用这几个选项控制应用程序的行为。这些选项包括受限用户账户安全性模式和配置文件模式。当程序必须以某个特殊用户的身份运行在一个受限制的安全性上下文环境中时,它需要使用受限用户账户安全性模式。配置文件模式则使用在你决定一个应用程序应该如何同Windows用户配置文件进行交互的时候。这两种模式都可以使用QFixApp或者CompatAdmin工具进行访问和设置,我们将在本文的后面部分中详细介绍这两个工具。
定制模式,系统管理员或者其它IT专业人员可以使用CompatAdmin工具(有关该工具的更多信息请见下文)为某个特殊程序或者程序集创建该模式。在创建完成之后,定制模式只能应用到用户正在安装的特定应用程序身上,而且可以使用修补包中的任何需要的修补。
 

2、如何启用兼容模式
最常见的办法是,打开文件属性,在“兼容性”对话框的标签页上勾选“以兼容模式运行这个程序”复选框,然后在下面的下拉列表里选择所要兼容的早期操作系统版本。 这实际上对应于在注册表HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers下新增一个键值,键值名称是可执行程序文件的完全路径,数据类型为reg_sz,数据数值为兼容的操作系统代码。
举例说明:假设“D:\game\星际争霸1.12”下的程序starcraft.exe在xp下无法运行,但是在windows 2000 下可以执行,那么我们就要把兼容模式设成windows 2000,这有两个方法可以实现。方法一:在文件属性对话框的“兼容性”标签页上勾选“以兼容模式运行这个程序”复选框,然后在下面的下拉列表里选择“windows 2000”;方法二:在命令行输入下面命令,可以得到相同的效果
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v “D:\game\星际争霸1.12\starcraft.exe” /t reg_sz /d "WIN2000" /f
事实上,方法一主要是用于用户操作,而方法二则多用于程序编写。 
3、深入
3.1操作系统是如何使用兼容性技术的?
兼容性技术的正常工作取决于操作系统在程序安装和运行期间与其进行交互所使用的数据库文件。除了程序加载程序中的一个快速程序检查例程之外,应用程序兼容性架构始终位于核心操作系统组件(例如内核组件)外部。只有在加载程序的初始化数据库查询指出:程序需要兼容性技术,这些技术才会被调用。从而消除了在API内部为满足某一个程序的运行需要使用特殊兼容性代码的需要。兼容性修补支持并不能为直观感觉到,对操作系统或者程序的执行性能也没有显著的影响。
操作系统使用的数据库文件如下:
MigDB.inf,该数据库被用来向Windows 95、Windows 98和Windows Me系统的升级提供支持。该文件包含了丰富的匹配信息和标志应用程序,它指出了在系统升级之前,哪些程序存在不兼容问题,或者哪些程序需要用户的干预。
NTCompat.inf,该数据库包含的信息与MigDB相同,但是它被用来向Windows NT 4.0和Windows 2000系统的升级提供支持。
SysMain.sdb,该数据库既包括匹配信息也包括兼容性修补。你可以在%Windir%\AppPatch目录下找到该文件。
AppHelp.sdb,该数据库文件仅仅存储了一些提示用户安装补丁程序的帮助信息,为他们提供了一些URL地址,便于他们下载非Microsoft 的补丁程序,并且告诉他们在哪些地方可以找到更多的详细信息。该文件也可以在%Windir%\AppPatch目录下找到。
因此,MigDB和NTCompat形成了Windows XP的迁移兼容性技术,而SysMain和AppHelp形成(并有效包含)了程序在Windows XP上安装运行时所需的兼容性技术:兼容性修补、兼容性模式和应用程序帮助。
 
 
 
 
兼容性模式本质上是修改C:\Windows\AppPatch下的sysmain.sdb兼容性数据库。(未完……)
注:
1、reg add 参数作用
/v       所选项之下要添加的值名。
/t       RegKey 数据类型
         [ REG_SZ    | REG_MULTI_SZ | REG_EXPAND_SZ |
           REG_DWORD | REG_BINARY   | REG_NONE      ]
         如果忽略,则采用 REG_SZ。
/d       要分配给添加的注册表 ValueName 的数据。
/f       不用提示就强行覆盖现有注册表项。
2、操作系统代码
Windows NT 4.0 (Service Pack 5)          NT4SP5
windows 95                                       WIN95
windows 98 or windows ME                  WIN98
windows 2000                                   WIN2000
windows xp                                      WINXP
windows 2003                                   WIN2003
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jamesliuguo818082/archive/2010/03/17/5390399.aspx
阅读(2046) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~