zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    Citrix 挂经思考
    eBay OA挂经反思
    roblox OA ancestor names 根据roman to int改的
  • 原文地址:https://www.cnblogs.com/studynote/p/3108467.html
Copyright © 2011-2022 走看看