Windows 8.1 和 Windows Server 2012 R2 中的操作系统版本更改
05/31/2018
本文内容
平台
客户端- Windows 8.1
服务器- Windows Server 2012 R2
描述
我们对 GetVersion (Ex) Api 在 Windows 8.1 中的工作方式进行了一些重大更改,这是由于 GetVersion (Ex) Api 在过去使用的方式引起的。
在以前版本的 Windows 中,调用 GetVersion (Ex) Api 将返回操作系统 (OS) 的实际版本,除非应用程序兼容性填充程序已经缓解了该进程,以使其成为不同版本。 此操作是在临时基础上完成的,并且在 Microsoft 可以合理地在版本中填充的进程数量相对不完整。 许多应用程序都在破裂,因为由于版本检查设计不当,它们不会填充。
执行版本检查的一个原因是,警告用户应用程序需要在更高版本的操作系统上运行。 然而,由于检查不佳,应用通常会错误地警告他们需要在 Windows XP 或更高版本上运行,这当然是最新的操作系统。 通常情况下,最新的操作系统会运行应用程序,而不会出现任何问题。
形式
在 Windows 8.1 中,弃用 (Ex) Api 已弃用。 这意味着,当你仍可调用这些 API 函数时,如果你的应用程序没有专门 Windows 8.1 目标,则这些函数将返回 Windows 8 版本 (6.2) 。
解决方案
添加应用程序清单
为了使应用面向 Windows 8.1,需要为应用的可执行文件包括 应用 (可执行文件) 清单 。 然后,在清单的 " < 兼容性 > " 部分中,需要为要声明应用支持的每个 Windows 版本添加一个 < supportedOS > 元素。
下面的示例显示一个应用程序的应用程序清单文件,该文件支持从 Windows Vista 到 Windows 8.1 的 Windows 的所有版本:
type="win32"
name="Contoso.ExampleApplication.ExampleBinary"
version="1.2.3.4"
processorArchitecture="x86"
/>
Contoso Example Application
上面标记的行 * ADD THIS LINE * 显示了如何准确地将应用程序定位到 Windows 8.1。
在应用程序清单中声明对 Windows 8.1 的支持在以前的操作系统上运行你的应用时不会有任何影响。
使用 VersionHelpers 而不是 GetVersion (Ex)
Windows 8.1 为 GetVersion (Ex) (称为 VersionHelpers)引入了新的替换 API 函数。 它们非常易于使用;你需要做的就是 #include 。 VersionHelpers 头文件中可用的内联函数允许你的代码询问操作系统是 Windows 的给定版本还是更高版本。
示例 例如,如果你的应用程序需要 Windows 8 或更高版本,请使用以下测试:
#include
// ...
if (!IsWindows8OrGreater())
{
MessageBox(NULL, "You need at least Windows 8", "Version Not Supported", MB_OK);
}
可用的 VersionHelper API 函数包括:
#define VERSIONHELPERAPI FORCEINLINE BOOL
VERSIONHELPERAPI IsWindowsXPOrGreater();
VERSIONHELPERAPI IsWindowsXPSP1OrGreater();
VERSIONHELPERAPI IsWindowsXPSP2OrGreater();
VERSIONHELPERAPI IsWindowsXPSP3OrGreater();
VERSIONHELPERAPI IsWindowsVistaOrGreater();
VERSIONHELPERAPI IsWindowsVistaSP1OrGreater();
VERSIONHELPERAPI IsWindowsVistaSP2OrGreater();
VERSIONHELPERAPI IsWindows7OrGreater();
VERSIONHELPERAPI IsWindows7SP1OrGreater();
VERSIONHELPERAPI IsWindows8OrGreater();
VERSIONHELPERAPI IsWindows8Point1OrGreater();
VERSIONHELPERAPI IsWindowsServer();
它们将返回 TRUE 或 FALSE,具体取决于你所询问的问题,你只需定义你支持的最低级别操作系统。
资源