Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
petrovich1
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
#1

Утилита для правки номера версии (без перестроения) - C++

18.03.2008, 13:37. Просмотров 789. Ответов 6
Метки нет (Все метки)

Мне приходится перестраивать весь проект лишь для того чтобы поменять номер версии. Как сделать программу которая залезла бы в ехе-шник и поменяла бы номер версии. Конкретно возникла проблема с записью в VC_VERSION_INFO.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2008, 13:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Утилита для правки номера версии (без перестроения) (C++):

процедура без глобальных переменных для вывода суммы элементов матрицы и номера строки с минимальной суммой элементов - C++
Задание: составить процедуру без глобальных переменных выполняющуюю для для матрицы D с размерами kхl(k<8 и l< 10) необходимо...

Утилита для просмотра DLL - C++
Нслышан, что еть утилита такая которая просматривает DLL и H файл делает. А вот какая не знаю :-(

Очень нужна простейшая системная утилита для Windows на С++ - C++
Здравствуйте, очень нужна помощь, мне, для проведения пары нужна простейшая утилита для Windows написаная на C++, я писал утилиту на Java,...

Подскажите горячие клавиши для перестроения решения - Visual Studio
подскажите хот кейс для ребилд онли в MS VS 2010 rebuild hot keys = ctrl + alt + F7 сабжж

Maya. Чем отличается демо от коммерческой версии? Дадут ли добро на использование старой версии без покупки? - Графические программы
Недавно смотрел цену на продукты автодеска, а именно - на майю. Прифигел так маленько - ладно сейчас курс валют такой. Но всегда есть...

Выбор версии php для максимальной скорости без использования ООП - PHP
Я всегда думал, что php 5.2 работает быстрее, чем более старые версии при использовании только функционального программирования. Будут ли...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
AnTr
Сообщений: n/a
18.03.2008, 14:36 #2
Хaллo!
Нaдеюсъ этo пoмoжет:

Глaвнaя прoгрaммa:
C++
1
2
3
4
5
6
7
8
9
#include 'stdafx.h'
#include <conio.h>
 
int main(int argc, char* argv[])
{
    printf('Versionnummer: 0');
    getch();
    return 0;
}
>резулътaт TestVersion.exe

Patch прoгрaммa:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include 'stdafx.h'
#include 'iostream.h'
#include <string.h>
 
bool PatchFile(const char* p_pkcFilename)
{
    FILE* pFile=fopen(p_pkcFilename, 'rb');
    if(!pFile) {return false;};
    fseek(pFile, 0, SEEK_END);
    int iSize = ftell(pFile);
    fseek(pFile, 0, SEEK_SET);
    char* cpBuffer = new char[iSize];
    fread(cpBuffer, iSize, 1, pFile);
    fclose(pFile);
    pFile=fopen(p_pkcFilename, 'wb');
    int i;
    char sT[] = 'Versionnummer: ';
    for(i=0;i<iSize;i++)
    {
        if(strnicmp(cpBuffer+i, sT, strlen(sT))==0)
        {
            sprintf(cpBuffer+i+strlen(sT), ' %d', 666);         
        };
    };
    fwrite(cpBuffer, iSize, 1, pFile);
    delete [] cpBuffer;
    fclose(pFile);
    return true;
};
 
int main(int argc, char* argv[])
{
    if(!PatchFile('TestVersion.exe'))
    {
        printf('Error');
        return 0;
    };
    printf('OK');
    return 0;
}
VVP
Сообщений: n/a
18.03.2008, 15:05 #3
2AnTr: Вы вопрос-от поняли?

2petrovich1: Если разрабатываешь в MSVC, то открываешь нужный exe-шник как resources, получаешь список ресурсов, находишь ресурс типа VERSION - правишь и сохраняешь изменения. Все это прямо в IDE.
Таким-же образом можно (и нужно) корректировать ресурсы сторонних exe-шников, не забывай делать резервные копии и правильно устанавливать язык ресурса.
petrovich1
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
18.03.2008, 19:37  [ТС] #4
Нужна утилита которой можно передать в качестве параметра новый номер билда. ПИШЕШЬ в командной строке цифру (номер версии), нажимаешь ЭНТЕР и твой проект начисто сменил значения полей fileVersion и productVersion.
0
petrovich1
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
18.03.2008, 19:39  [ТС] #5
Вот прога:
(Только не надо обвинять в незнании языка, я её взял из Хелпа)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include 'stdafx.h'
 
void ErrorHandler(char buf[256])
{
    MessageBox(NULL, buf, 'ГЋГёГЁГЎГЄГ*', MB_OK);
}
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    HGLOBAL hResLoad;     // handle to loaded resource 
    HINSTANCE hExe;        // handle to existing .EXE file 
    HRSRC hRes;         // handle/ptr. to res. info. in hExe 
    HANDLE hUpdateRes;  // update resource handle 
    VOID* lpResLock;    // pointer to resource data 
    BOOL result; 
 
    // Load the .EXE file that contains the dialog box you want to copy. 
    hExe = LoadLibrary('DLG2.exe'); 
 
    if (hExe == NULL) 
    { 
        ErrorHandler('Could not load exe.'); 
        return 0;
    } 
 
    // Locate the dialog box resource in the .EXE file. 
    hRes = FindResource(hExe, 'AboutBox', RT_DIALOG); 
 
    if (hRes == NULL) 
    { 
        ErrorHandler('Could not locate dialog box.'); 
    } 
 
    // Load the dialog box into global memory. 
    hResLoad = LoadResource(hExe, hRes); 
 
    if (hResLoad == NULL) 
    { 
        ErrorHandler('Could not load dialog box.'); 
        return 0;
    } 
 
    // Lock the dialog box into global memory. 
    lpResLock = LockResource(hRes); 
 
    if (lpResLock == NULL) 
    { 
        ErrorHandler('Could not lock dialog box.'); 
        return 0;
    } 
 
    // Open the file to which you want to add the dialog box resource. 
    hUpdateRes = BeginUpdateResource('DLG1.exe', FALSE); 
 
    if (hUpdateRes == NULL) 
    { 
        ErrorHandler('Could not open file for writing.'); 
        return 0;
    } 
 
    // Add the dialog box resource to the update list. 
    result = UpdateResource(hUpdateRes,       // update resource handle 
         RT_DIALOG,                   // change dialog box resource 
         'AboutBox',                  // dialog box name 
         MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),  // neutral language
         lpResLock,                   // ptr to resource info 
         SizeofResource(hExe, hRes)); // size of resource info. 
 
    if (result == FALSE) 
    { 
        ErrorHandler('Could not add resource.'); 
    } 
 
    // Write changes to FOOT.EXE and then close it. 
    if (!EndUpdateResource(hUpdateRes, FALSE)) 
    { 
        ErrorHandler('Could not write changes to file.'); 
    } 
 
    // Clean up. 
    if (!FreeLibrary(hExe)) 
    { 
        ErrorHandler('Could not free executable.'); 
    } 
 
 
        return 0;
}
0
petrovich1
0 / 0 / 0
Регистрация: 22.09.2007
Сообщений: 314
18.03.2008, 19:42  [ТС] #6
Как видите всё очень просто! Но не работает ф-я LockResource.
0
VVP
Сообщений: n/a
18.03.2008, 19:53 #7
В ф-цию LockResource надо передать результат работы ф-ции LoadResource, т.е. переменную hResLoad.

Удачи.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2008, 19:53
Привет! Вот еще темы с ответами:

Есть ли возможность добавить страницу в joomla, без правки шаблона(чисто через админку)? - Joomla
Разбираюсь с joomla.Надо добавить страницы на сайт, там была изначально страница &quot;пример страницы&quot;, ноьона мне не нужна, надо свои создать....

Как для web-версии и мобильной версии поставить разные картинки - HTML, CSS
Всем добрый вечер! Кто знает, подскажите: мне необходимо для вебверсии и мобильной версии поставить разные картинки.

Есть ли какие - то ограничения по минимальной версии Windows / Linux для последней версии Qt? - C++ Qt
Привет! Вот тут какие - то непонятки. Скачал Qt последний на Win7 - ворк пёрфеткли, на 8.1 - та же петрушка. А вот Windows XP SP3 под рукой...

Утилита winnity.exe - выбор папки без участия пользователя - CMD/BAT
Добрый вечер. Прошу помочь решить задачку с небольшой программкой обработки видео. В процессе запуска она запускает :initfolder, что в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.03.2008, 19:53
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru