Skip to content

Commit 53c5ffc

Browse files
Opt, GetFileVersion的兼容性判断调整为运行时判断。提高稳定性
1 parent 1c07bde commit 53c5ffc

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

src/YY/Base/Utils/FileInfo.cpp

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <memory>
44
#include <YY/Base/ErrorCode.h>
5+
#include <YY/Base/Utils/SystemInfo.h>
56

67
#pragma comment(lib, "Version.lib")
78

@@ -45,23 +46,26 @@ namespace YY
4546

4647
VS_FIXEDFILEINFO* _pFileInfo = NULL;
4748
UINT _cbFileInfo;
48-
#ifndef _ATL_XP_TARGETING
49-
if (!VerQueryValueW(_hGlobal, L"\\", (LPVOID*)&_pFileInfo, &_cbFileInfo))
50-
{
51-
return HRESULT_From_LSTATUS(GetLastError());
52-
}
53-
#else
54-
// XP系统不允许直接调用,不然会触发内存非法访问。所以先复制到一个内存块上
55-
const DWORD _cbFileInfoBuffer = SizeofResource(_hMoudle, _hRsrcVersion);
56-
void* _pFileInfoBuffer = alloca(_cbFileInfoBuffer);
49+
if (GetOperatingSystemVersion() >= Version(6, 0))
50+
{
51+
if (!VerQueryValueW(_hGlobal, L"\\", (LPVOID*)&_pFileInfo, &_cbFileInfo))
52+
{
53+
return HRESULT_From_LSTATUS(GetLastError());
54+
}
55+
}
56+
else
57+
{
58+
// XP系统不允许直接调用,不然会触发内存非法访问。所以先复制到一个内存块上
59+
const DWORD _cbFileInfoBuffer = SizeofResource(_hMoudle, _hRsrcVersion);
60+
void* _pFileInfoBuffer = alloca(_cbFileInfoBuffer);
5761

58-
memcpy(_pFileInfoBuffer, _hGlobal, _cbFileInfoBuffer);
62+
memcpy(_pFileInfoBuffer, _hGlobal, _cbFileInfoBuffer);
5963

60-
if (!VerQueryValueW(_pFileInfoBuffer, L"\\", (LPVOID*)&_pFileInfo, &_cbFileInfo))
61-
{
62-
return HRESULT_From_LSTATUS(GetLastError());
63-
}
64-
#endif
64+
if (!VerQueryValueW(_pFileInfoBuffer, L"\\", (LPVOID*)&_pFileInfo, &_cbFileInfo))
65+
{
66+
return HRESULT_From_LSTATUS(GetLastError());
67+
}
68+
}
6569

6670
_pVersion->uLowPart = _pFileInfo->dwFileVersionLS;
6771
_pVersion->uHightPart = _pFileInfo->dwFileVersionMS;

0 commit comments

Comments
 (0)