Получить информацию о версии EXE-модуля (и ему подобных) из ресурса VS_VERSION_INFO программно весьма просто. В MSDN'e об этом весьма культурно все расписано.
У меня такой вопрос: как можно исправлять/добавлять/удалять ее в ходе выполнения программы, а не обыкновенным редактированием файла version.rc?

Может кто сталкивался с этой проблемой и знает как ее решить. Спасибо!
Здравствуйте, Бодряк, Вы писали:
Б>Получить информацию о версии EXE-модуля (и ему подобных) из ресурса VS_VERSION_INFO программно весьма просто. В MSDN'e об этом весьма культурно все расписано.
Б>У меня такой вопрос: как можно исправлять/добавлять/удалять ее в ходе выполнения программы, а не обыкновенным редактированием файла version.rc?
Б>
Может кто сталкивался с этой проблемой и знает как ее решить. Спасибо!
Может подойдут
BeginUpdateResource
UpdateResource
EndUpdateResource
?
Здравствуйте, Patalog, Вы писали:
P>Может подойдут
P>BeginUpdateResource
P>UpdateResource
P>EndUpdateResource
P>?
Я тоже пришел к выводу, что это и нужно

но штука в том, что мы передаем в UpdateResource?
BOOL UpdateResource(
HANDLE hUpdate, // update-file handle
LPCTSTR lpType, // resource type
LPCTSTR lpName, // resource name
WORD wLanguage, // language identifier
LPVOID lpData, // resource data
DWORD cbData // length of resource data
);
Я имею в виду указатель на новое значение данных (lpData) Получить его можно (например, через GetFileVersionInfo(...)), но как его правильно подредактировать???
Здравствуйте, Бодряк, Вы писали:
const int name_size = MAX_PATH;
TCHAR file_name[name_size] = { 0 };
lstrcpy(file_name, "my_cool_app.exe");
DWORD unused = 0;
DWORD version_size = GetFileVersionInfoSize(file_name, &unused);
_ASSERTE(version_size);
unsigned char* version_info = new unsigned char[version_size];
BOOL res = GetFileVersionInfo(file_name, 0, version_size, version_info);
_ASSERTE(res);
VS_FIXEDFILEINFO* fixed_info = NULL;
UINT block_len = 0;
res = VerQueryValue(version_info, "\\", reinterpret_cast<void**>(&fixed_info), &block_len);
_ASSERTE(res);
++fixed_info->dwFileVersionLS;
HANDLE resource = BeginUpdateResource(file_name, FALSE);
_ASSERTE(resource);
res = UpdateResource(resource, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), version_info, version_size);
_ASSERTE(resource);
res = EndUpdateResource(resource, FALSE);
_ASSERTE(resource);
delete [] version_info;
Здравствуйте, Patalog, Вы писали:
P>Здравствуйте, Бодряк, Вы писали:
С VS_FIXEDFILEINFO все работает, а мне нужно поменять строковый параметр (VALUE)
к примеру
VerQueryValue(handle, "\\StringFileInfo\\<codepage>\\ProductVersion",..
функция выдаст ptr, но его изменение никак не повлияет на результат