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

原文地址:https://www.cnblogs.com/studynote/p/3108467.html