【发布时间】:2015-02-24 07:18:21
【问题描述】:
更新
我已经重写了原来的问题,因为之前的文字更像是一个故事而不是描述我的真正问题:
我们有一组针对 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 更早的东西而你不知道,你可能不应该关心他们。
-
我已经读了两遍了,我仍然无法弄清楚你在问什么。
-
如果没有 used 将在 XP 之前的系统上运行,那你为什么要检查呢?
-
@DavidHeffernan - 我已经完全重新措辞以使其清楚,或者至少不是一个故事
-
您想要完整的在 NT4 和 Win2k 上可用的 API 列表吗?
标签: c++ windows winapi visual-studio-2013