【发布时间】:2013-08-21 20:11:43
【问题描述】:
我有用于查找 Windows 版本的 C++ 代码:
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。
还有其他人遇到过这个错误吗? 有人知道如何解决它吗?
【问题讨论】:
-
您可能在兼容模式下运行。
-
是的。我运行了 gpedit.msc 并禁用了应用程序兼容性引擎和程序兼容性助手。它开始起作用了!
标签: windows-8 windows-installer custom-action windowsversion