45 lines
1.1 KiB
C
45 lines
1.1 KiB
C
#include "stdafx.h"
|
|
#include "VersionInfo.h"
|
|
|
|
static BOOL _loadedOwnVersion = FALSE;
|
|
static LPWSTR _version;
|
|
|
|
HRESULT GetOwnVersion(LPWSTR *version) {
|
|
if (!_loadedOwnVersion) {
|
|
_loadedOwnVersion = TRUE;
|
|
|
|
LPWSTR filename;
|
|
GetOwnFileName(&filename);
|
|
|
|
DWORD verHandle;
|
|
DWORD verInfoSize = GetFileVersionInfoSize(filename, &verHandle);
|
|
if (verInfoSize == 0) {
|
|
LocalFree(filename);
|
|
return HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
|
|
LPVOID verInfo = LocalAlloc(LPTR, verInfoSize);
|
|
if (!GetFileVersionInfo(filename, verHandle, verInfoSize, verInfo)) {
|
|
LocalFree(filename);
|
|
LocalFree(verInfo);
|
|
return HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
|
|
LocalFree(filename);
|
|
|
|
LPWSTR value;
|
|
UINT size;
|
|
if (!VerQueryValue(verInfo, L"\\StringFileInfo\\040904B0\\ProductVersion", (LPVOID *)&value, &size)) {
|
|
LocalFree(verInfo);
|
|
return HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
|
|
_version = (LPWSTR)LocalAlloc(LPTR, (wcslen(value) + 1) * sizeof(WCHAR));
|
|
wcscpy(_version, value);
|
|
LocalFree(verInfo);
|
|
}
|
|
|
|
*version = _version;
|
|
return _version == NULL ? E_FAIL : S_OK;
|
|
}
|