更新如何正确使用IsWindowsXPOrGreater函数?
我已经重写了原来的问题如前文不是描述我的真正的问题更多的是一个故事:
我们有一组应用程序面向Windows XP达到Windows 8.1和Windows Server 2008 2012(也支持32位/ 64位版本)。以前,我们在代码中没有做任何事情来确保您在这些平台上运行。
在创建我们的Windows API包装类集时,我们对使用IsWindowsXPOrGreater
函数调用进行了更改。如果这个调用返回false,我们会抛出一个异常,这个异常将被捕获并导致显示错误消息。
但是,该错误消息是通过跳过一组Windows API调用创建的。根据MSDN的大部分调用需要Windows 2000或更高版本,但少数是Windows XP或更高版本。
在实现单元测试和mod之后,我开始怀疑如果我们在Windows XP之前的任何软件上运行该软件,代码将实际运行 - 因为IsWindowsXPOrGreater
函数需要Windows 2000或更高版本,否则错误消息模块将失败在他们对Windows API的调用中。
我已经向我的同事们展示过,如果我强制IsWindowsXPOrGreater
给出错误返回,会引发异常,但最终会导致无限循环,因为我们的错误消息模块会引发异常的另一个实例,我们再次选取尝试使用Windows API等。
问题
如果IsWindowsXPOrGreater
返回false的Windows API调用是安全的任何32位安装Windows操作系统的使用?
对于大多数Windows API函数,MSDN似乎显示了Windows 2000或Windows XP的最低限度。是否有早期版本的User32.dll,Kernel32.dll等文件?
我目前的解决方法
我们从此改变了我们的代码搭上新LowerThanWindowsXPException
- 将使用一种变型包装器MessageBox
终止应用程序之前显示一个简单的信息。这个变体不检查windows版本,并且基于我们已经存在的一些遗留的Visual Basic代码。这在Windows 95上工作,虽然我们现在没有办法检查。
未来我们将使用IsWindows7OrGreater
进行其他Windows API调用,在这些情况下,我们将引发一个LowerThanWindows7Exception
- 我们可以采用不同的方式进行处理(例如,使用我们的Windows XP API调用来显示错误消息或下降回到一些替代功能)。
这是太多的文字,但如果任何人使用早于Windows XP的东西,并且您不知道它,那么您可能不应该在乎它们。 – 2015-02-24 07:43:19
我已经阅读了两次,但仍然无法解决你所问的问题。 – 2015-02-24 08:56:57
如果在XP系统之前没有使用过,那么你为什么要检查它? – 2015-02-24 09:35:16