【问题标题】:windows 8 minor version returning 0 instead of 2Windows 8 次要版本返回 0 而不是 2
【发布时间】: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


【解决方案1】:

事实证明,在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多