Windows 8.1之后的WinAPI弃用

我一直在使用GetVersionEx ,它在运行Windows 8.1的机器上失败 。 查看一些信息发现GetVersionEx从8.1版本开始。

我想问哪里可以find完整的弃用API列表,因为我不想再使用它了。

编辑:我不是问什么,而不是GetVersionEx ,我要求一个完整的不赞成使用的API列表。

Solutions Collecting From Web of "Windows 8.1之后的WinAPI弃用"

Microsoft已经描述了Windows 8.1和Windows server 2012 R2中操作系统版本更改中的更改 。 在本文的左侧,您可以导航到与Windows 8.1和Windows server 2012 R2客户端和服务器兼容性相关的其他问题。

您遇到的行为如下所示:

在Windows 8.1中,GetVersion(Ex)API已被弃用。 这意味着虽然您仍然可以调用API,但如果您的应用程序没有专门针对Windows 8.1,则将获得Windows 8版本控制(6.2.0.0)。

有人在另一个论坛上指出我的这种做法。

将您的Windows 8.1 OS GUID包含在您的应用程序清单文件中

你的.manifest应该包括Windows 8.1。 看起来像这样

 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!--This Id value indicates the application supports Windows 8.1 functionality--> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> </application> 

这种方法的一个问题是,旧的二进制文件将总是在Windows 8.1和更高版本的Windows版本上显示错误的Windows版本。

这种方法的另一个问题是, GetVersionEx API仍然被弃用,所以你将无法定位Visual Studio 2013平台工具集。 您必须将您的平台工具集设置为Visual Studio 2012或更低版本。

更新:其实我记得你可以禁用使用这样的东西。

 #pragma warning (disable : 4996) versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); POSVERSIONINFO pVersionInfo = (POSVERSIONINFO)&versionInfo; if (::GetVersionEx(pVersionInfo)) { if (6 == versionInfo.dwMajorVersion && 3 == versionInfo.dwMinorVersion) { wcout << _T("Windows 8.1 Detected") << endl; } else if (6 == versionInfo.dwMajorVersion && 2 == versionInfo.dwMinorVersion) { wcout << _T("Windows 8.0 Detected") << endl; } } #pragma warning (default : 4996) 

您也可以使用NetWkstaGetInfo API获取本地计算机的版本。

 bool GetWindowsVersion(DWORD& major, DWORD& minor) { LPBYTE pinfoRawData; if (NERR_Success == NetWkstaGetInfo(NULL, 100, &pinfoRawData)) { WKSTA_INFO_100 * pworkstationInfo = (WKSTA_INFO_100 *)pinfoRawData; major = pworkstationInfo->wki100_ver_major; minor = pworkstationInfo->wki100_ver_minor; ::NetApiBufferFree(pinfoRawData); return true; } return false; } int _tmain(int argc, _TCHAR* argv[]) { DWORD major = 0; DWORD minor = 0; if (GetWindowsVersion(major, minor)) { wcout << _T("Major:") << major << _T("Minor:") << minor << endl; } return 0; } 

所有这一切说我写了两个代码示例获取Windows版本没有使用GetVersionEx或GetVersion APIs。 我已经把它们贴在页面的底部。 问题是GetVersionEx API只需要10微秒左右的时间执行,而我的代码样本需要10-50毫秒的时间才能执行。

获取Windows版本VerifyVersionInfo API