我有 C++ 中的代码,目的是查找 Windows 版本:
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
int iRet = OS_UNKNOWN;
ZeroMemory ( & osvi, sizeof ( OSVERSIONINFOEX ) );
osvi.dwOSVersionInfoSize = sizeof ( OSVERSIONINFOEX );
if ( !( bOsVersionInfoEx = GetVersionEx ( ( OSVERSIONINFO * ) & osvi ) ) )
{
osvi.dwOSVersionInfoSize = sizeof ( OSVERSIONINFO );
if ( ! GetVersionEx ( ( OSVERSIONINFO * ) & osvi ) )
return OS_UNKNOWN;
}
//the rest is irrelevant ...
iRet 将返回一个标识 Windows 版本的内部枚举值。它将根据osvi.dwPlatformId、osvi.dwMajorVersion和osvi.dwMinorVersion中返回的值进行调整。
根据 MSDN,对于 Windows 8,MajorVersion 的值为 6,MinorVersion 的值为 2。
我在 dll 中编译了这段代码,如果我从测试 EXE 程序调用 DLL,代码实际上可以工作。
但是,如果我从 Windows 安装程序包 (MSI) 中的自定义操作中调用来自相同 DLL 的相同代码,则 GetVersionEx() 会为 MinorVersion 字段返回 0。
有没有其他人遇到过这个错误?有人知道如何解决它吗?