繁体   English   中英

Windows 8次要版本返回0而不是2

[英]windows 8 minor version returning 0 instead of 2

我有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。

还有其他人遇到此错误吗? 有人知道如何解决吗?

事实证明,在Windows 7+上使用GetVersion(Ex)时,默认情况下Windows Installer涉及该版本。 答案始终是Vista SP0。 您可以改用VersionNT MSI值。

来源: http : //blogs.msdn.com/b/cjacks/archive/2009/05/06/why-custom-actions-get-a-windows-vista-version-lie-on-windows-7.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM