WUIsBack/shared/VersionInfo.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;
}