1

我有代碼在C++中具有找到Windows版本的目的:窗戶8次版本返回0而不是2

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編譯,如果我調用的DLL從測試的代碼實際工作EXE程序。

但是,如果我在Windows安裝程序包(MSI)中的自定義操作內調用了同一個DLL中的相同代碼,GetVersionEx()將爲MinorVersion字段返回0。

有沒有人遇到過這個bug? 有人知道如何解決它嗎?

+1

您可能正在以兼容模式運行。 – SLaks

+0

是的。我運行了gpedit.msc並禁用了應用程序兼容性引擎和程序兼容性助手。它開始工作! – Alex

回答