我正在尝试检索kernel32.dll
版本以执行Windows版本检查。但是,出于某种原因,即使kernel32.dll
的版本(如文件属性中所示)为10.0.10586.0,返回的版本为:6.2.10586.0
怎么来的?
DWORD dwDummy;
DWORD dwFVISize = GetFileVersionInfoSize(lpszFilePath, &dwDummy);
LPBYTE lpVersionInfo = new BYTE[dwFVISize];
if (GetFileVersionInfo(lpszFilePath, 0, dwFVISize, lpVersionInfo) == 0)
{
return FALSE;
}
UINT uLen;
VS_FIXEDFILEINFO *lpFfi;
BOOL bVer = VerQueryValue(lpVersionInfo, L"\\", (LPVOID *)&lpFfi, &uLen);
if (!bVer || uLen == 0)
{
return FALSE;
}
DWORD dwFileVersionMS = lpFfi->dwFileVersionMS;
DWORD dwFileVersionLS = lpFfi->dwFileVersionLS;
delete[] lpVersionInfo;
DWORD dwLeftMost = HIWORD(dwFileVersionMS);
DWORD dwSecondLeft = LOWORD(dwFileVersionMS);
DWORD dwSecondRight = HIWORD(dwFileVersionLS);
DWORD dwRightMost = LOWORD(dwFileVersionLS);
答案 0 :(得分:6)
您正在从此任务的版本信息中读取错误的字段。而不是dwFileVersionMS
和dwFileVersionLS
使用dwProductVersionMS
和dwProductVersionLS
。
文件版本字段受supportedOS
兼容性问题的影响。这是它们的值取决于应用程序清单中声明的supportedOS
级别。另一方面,产品版本字段不依赖于清单。
答案 1 :(得分:4)