技术开发 频道

兼容性问题不断 如何进行操作系统版本检查?

  【IT168 专稿】 “帅哥,你有没有年薪100万?”

  “Of cause,当然,sure!”

  “不好意思,我只跟年薪100万以下的人聊天。”

  以上只是一个笑话,这位妹妹嫌富爱穷很是让人肃然起敬。在软件世界,也有很多应用程序有着嫌富爱穷,喜旧厌新的“美德”。他们只能在旧的操作系统上运行,面对新的操作系统,它们死活不愿意正常运行,不是默默无语地退出就是给个“不支持操作系统”的提示。妹妹们嫌富爱穷可以,应用程序们喜旧厌新就不好了。

  操作系统版本检查带来的兼容性问题

  无论是普通用户还是应用程序开发人员,在他们将应用程序运行到新的操作系统时,他们遇到的最普遍的应用程序兼容性问题是,应用程序检查操作系统版本失败所带来的应用程序对新操作系统的不支持。操作系统版本检查本来是为了确保应用程序所需要的某些操作系统特性确实存在,有了这些操作系统特性,应用程序才可以正常运行。当操作系统版本检查被滥用的时候,很多兼容性问题由此而产生。用户可能会遇到应用程序在加载的时候,悄无声息地退出而没有任何的信息提示。或者是,用户可能会看到一个类似“此应用程序必须在Windows XP或者是其后的操作系统上运行”的错误提示对话框。但是,事实上这台计算机的操作系统是Windows 7,当然是在Windows XP之后了。错误或者说是低劣的版本检查,会给用户带来极大的不便。

  通常,应用程序因为操作系统版本检查而失败有两个原因:

  • 在版本检查的代码中有Bug。在主版本号增加,次版本号减小的情况下,例如,将版本号从5.1变化到6.0,或者是某个期望的补丁(service pack)没有安装,甚至你在运行一个更新的操作系统(例如,从Windows XP SP3升级到Windows Vista SP1),这些情况都会导致版本检查会失败。

  • 应用程序开发人员特意设计的版本检查行为,阻止应用程序在未经过足够测试的新操作系统上运行。但是,我们建议你不要阻止应用程序在更新的操作系统上运行。除非最终用户许可协议禁止应用程序在更新的操作系统上使用,否则应用程序不应在操作系统版本号增加的情况下无法运行。如果应用程序无法运行,则必须向用户发送消息,并向日志写入一条消息,然后正常退出。

  当一个应用程序在“不兼容”的Windows版本上运行的时候,它可能会显示一个错误消息,也可能悄无声息地退出或者是无法正常工作。通常,如果我们解决了版本检查的问题,它就可以正常工作。当遇到这种问题,最终用户或者是IT管理员可以简单地使用Windows 7的XP兼容模式,或者是微软所提供的应用程序兼容性工具集(Application Compatibility Toolkit (ACT)),对应用程序进行操作系统版本“欺骗”,让应用程序认为他还是运行在较旧的Windows版本上,从而解决版本检查的问题,让应用程序在Windows 7上正常运行。这里需要注意的是,兼容模式仅仅适用于使用非托管代码进行的操作系统版本检查,对于托管代码中利用Environment.OSVersion或者是通过P/Invoke使用GetVersionEx进行的操作系统版本检查并不适用。

  图1 Windows 7的兼容模式

0
相关文章