На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> Изменение версии *.exe
    Всем привет!
    Столкнулся с такой проблемой - нужно поменять версию у экзешника, т.е. поле FileVersion. Пытался это сделать через прогу Resource Editor и Restorator. Первая прога меняет в бинарнике соответсвующее поле, но винда почему-то в упрор выдает старую версию. Вторая же выдает ту же версию, что и винда (старую), но менять не дает! Если бинарник открыть, то там FileVersion = new version, в чем же прикол,господа! :wall:
    Может кто-нибудь уже встречался с такой бедой, знает чем помочь...Осень нада!

    ЗЫ: Restorator выдает два поля FileVersion: одно называется File version = старой версии (то что и выдает винда), и второе FileVersion = измененной версии в бинарнике. Т.е. надо каким-то макаром найти первый вариант...
    Сообщение отредактировано: -AdyOS- -
      Вспоминается мне, что номер версии хранится в двух видах - текстовом(Unicode) и двоичном. Windows, по видимому, использует двоичный вид.
      Двоичный вид - смещение 0x2E от начала строки VS_VERSION_INFO
      ExpandedWrap disabled
        struct { /* v4.v3.v2.v1 */
           unsigned short v1;
           unsigned short v2;
           unsigned short v3;
           unsigned short v4;
        }
      Сообщение отредактировано: trainer -
        Попробывал вытащить эту инфу, но прога падает на выполнении VerQueryValue:
        ExpandedWrap disabled
              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);
          Недавно на OSR-е ( и точнее в журналe NT Insider ) была как раз статья о том, как правильно обращаться с версиями проекта
          http://osronline.com/article.cfm?id=359
            Спасибо! Все заработало. Т.е. получить инфу удалось, но терерь возник другой вопрос - а каким образом вписать изменения?

            Нашел! Как update делать. Правда, опять падает :( вот в этом месте
            ExpandedWrap disabled
               if(UpdateResource(hUpdateRes, RT_VERSION,
                          MAKEINTRESOURCE(VS_VERSION_INFO),
                          MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
                          bufVer, dwSizeFVerInf) == FALSE)
                      throw("Cant UpdateResource");
            Сообщение отредактировано: -AdyOS- -
              Все заработало, апдейт делает без ошибок, вот только одна фигня - инфа в файле-то не обнавилась почему-то... :wall:
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0624 ]   [ 15 queries used ]   [ Generated: 18.07.25, 00:31 GMT ]