我有代碼在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? 有人知道如何解決它嗎?
您可能正在以兼容模式運行。 – SLaks
是的。我運行了gpedit.msc並禁用了應用程序兼容性引擎和程序兼容性助手。它開始工作! – Alex