控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

Win7平台开发下的兼容性

作者:未知 出处:cnblog 2013年05月31日 阅读:

 1.尽量避免使用GetVersion函数

 
Windows 7 和 Windows Server 2008 R2 的内部版本号是 6.1。
 
进行版本检查时尽量用"<"号代替!=号,这样可以允许应用程序在更新版本的操作系统中运行。最低要求是,应用程序应该总是接受大于等于最低的受支持的操作系统版本号。
 
C++
 
a.通过GetVersionEx获取版本号来判断
 
 
OSVERSIONINFO osvi;
BOOL bIsWindowsXPorLater;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
bIsWindowsXPorLater = ( (osvi.dwMajorVersion > 5) ||
 
                      ( (osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1) )); 
 
 
 
b.通过VerifyVersionInfo来直接检测
 
 
OSVERSIONINFOEX osvi;
BOOL bIsWindowsXPorLater;
DWORDLONG dwlConditionMask = 0;
int op=VER_GREATER_EQUAL;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
osvi.dwMajorVersion = 5;
osvi.dwMinorVersion = 1;
osvi.wServicePackMajor = 2;
osvi.wServicePackMinor = 0;
 
VER_SET_CONDITION( dwlConditionMask, VER_MAJORVERSION, op );
VER_SET_CONDITION( dwlConditionMask, VER_MINORVERSION, op );
VER_SET_CONDITION( dwlConditionMask, VER_SERVICEPACKMAJOR, op );
VER_SET_CONDITION( dwlConditionMask, VER_SERVICEPACKMINOR, op );
 
bIsWindowsXPorLater = VerifyVersionInfo(
 
                      &osvi, 
 
                      VER_MAJORVERSION | VER_MINORVERSION | 
 
                      VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,
 
                      dwlConditionMask); 
 
            
C#
 
 
if (Environment.OSVersion.Version < new Version(5, 1))
 
{
 
       MessageBox.Show("Windows XP or later required.",
 
              "Incompatible Operating System", MessageBoxButtons.OK,
 
              MessageBoxIcon.Error);
 
       return;
 
 
当某功能在不同平台下有差异时,应用程序不应该执行操作系统版本检查。如果需要特定的功能 , 最好尝试查找该功能 , 只有在找不到该功能的时候才会失败。
 
C++
 
使用GetProcAddress()来判断函数是否存在。
 
 
C#
 
 
try{
  FunctioninHighVersion();
}
catch (EntryPointNotFoundException)
{
  FunctioninLowVersion();
 
 
2.Win7不再支持 Windows Mail和Windows Movie Maker 
 
 
3.win7不再支持Microsoft Agent
 
Microsoft Agent是一种基于微软视窗平台的可编程的即时交互性动画角色。开发人员能够用该角色作为助手介绍,向导,娱乐或作为一种加强网站及应用程序交互性开发的手段。 Microsoft Agent能使程序员和网站开发者设计出更加人性化的用户交互界面。除了可以接受键盘和鼠标的输入外, Microsoft Agent还可以听懂用户的语音命令,动画角色会根椐用户的准标语音命令通过同步语音,录音或文本框作出相应的回馈。 
 
Win7不再支持Microsoft Agent,但是仍然可以到微软官网下载修复补丁以支持该功能。
 
 
4.使用Trident来判断IE版本
 
IE8及以上版本使用兼容模式时,user-agent的version token将显示其兼容的版本。这时需要根据Trident来判断IE的版本。
 
比如IE8,不用兼容模式时version token为MSIE 8.0,与IE7兼容的话version token为MSIE 7.0,但是会附加Trident/4.0字符串来表明当前IE是IE8,另外Trident/5.0对应IE9,Trident/6.0对应IE10
 
 
5.移除了注册表反射机制
 
Windows Server 2008, Windows Vista, Windows Server 2003, 和Windows XP系统都用反射机制来同步32位和64位注册表。但是从Windows 7和Windows Server 2008 R2开始,MS移除了注册表反射,融入了反射键。
 
6.MSMQ默认使用SHA-2签名
 
这样将导致Win7和低版本中的MSMQ不兼容。
 
 
7.UAC数据重定向
 
当应用程序需要对系统目录或者注册表进行写入操作,但却没有相应的权限时,UAC数据重定向会将数据写入一个虚拟化的路径中,这时当切换到其他用户或启动或禁止UAC时将无法访问之前写入的数据。
 
所以开发应用程序的时候,不应该对敏感的系统区域进行写入操作,应该始终考虑使其运行在标准用户的权限下,而不是在管理员权限下运行。
 
当必须要写入系统目录或需要特殊权限的位置时,可以将项目设置为requireAdministrator的,这样应用程序在运行时可以获取管理员权限。
 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统