
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Столкнулся с такой проблемой - нужно поменять версию у экзешника, т.е. поле FileVersion. Пытался это сделать через прогу Resource Editor и Restorator. Первая прога меняет в бинарнике соответсвующее поле, но винда почему-то в упрор выдает старую версию. Вторая же выдает ту же версию, что и винда (старую), но менять не дает! Если бинарник открыть, то там FileVersion = new version, в чем же прикол,господа! ![]() Может кто-нибудь уже встречался с такой бедой, знает чем помочь...Осень нада! ЗЫ: Restorator выдает два поля FileVersion: одно называется File version = старой версии (то что и выдает винда), и второе FileVersion = измененной версии в бинарнике. Т.е. надо каким-то макаром найти первый вариант... |
Сообщ.
#2
,
|
|
|
Вспоминается мне, что номер версии хранится в двух видах - текстовом(Unicode) и двоичном. Windows, по видимому, использует двоичный вид.
Двоичный вид - смещение 0x2E от начала строки VS_VERSION_INFO ![]() ![]() struct { /* v4.v3.v2.v1 */ unsigned short v1; unsigned short v2; unsigned short v3; unsigned short v4; } |
Сообщ.
#3
,
|
|
|
Попробывал вытащить эту инфу, но прога падает на выполнении VerQueryValue:
![]() ![]() char buff[128]; char szResourceX [80]; char *pszResourceX = szResourceX; LPDWORD lpdwHandleToZero = NULL; DWORD dwSizeFVerInf; CString DllName = szFileName; dwSizeFVerInf = ::GetFileVersionInfoSize((LPTSTR)(LPCTSTR)DllName, lpdwHandleToZero); LPVOID lpFixedFileInf; lpFixedFileInf = new char[dwSizeFVerInf]; BOOL bRet = ::GetFileVersionInfo( (LPTSTR)(LPCTSTR)DllName, NULL, dwSizeFVerInf, lpFixedFileInf); if(bRet == FALSE) { } VS_FIXEDFILEINFO *pFixedFileInfo; UINT uLen = 0; bRet = VerQueryValue( (const LPVOID)lpFixedFileInf, "\\", (LPVOID *) (&pFixedFileInfo), &uLen); |
Сообщ.
#4
,
|
|
|
Недавно на OSR-е ( и точнее в журналe NT Insider ) была как раз статья о том, как правильно обращаться с версиями проекта
http://osronline.com/article.cfm?id=359 |
Сообщ.
#5
,
|
|
|
Спасибо! Все заработало. Т.е. получить инфу удалось, но терерь возник другой вопрос - а каким образом вписать изменения?
Нашел! Как update делать. Правда, опять падает ![]() ![]() ![]() if(UpdateResource(hUpdateRes, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), bufVer, dwSizeFVerInf) == FALSE) throw("Cant UpdateResource"); |
Сообщ.
#6
,
|
|
|
Все заработало, апдейт делает без ошибок, вот только одна фигня - инфа в файле-то не обнавилась почему-то...
![]() |