Win7平台开发下的兼容性
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的,这样应用程序在运行时可以获取管理员权限。
应用程序兼容性工具包(ACT)5.5
http://www.microsoft.com/en-us/download/details.aspx?id=7352
作者:Jingle Guo
出处:http://www.cnblogs.com/studynote/
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.