Автор | Сообщение |
|
| постоянный участник
|
Пост N: 2759
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.03.13 12:00. Заголовок: Как "зашить" ini-ник в ЕХЕ-файл ?
Всем привет. Хочется перенести INI-файл внутрь EXE-ника. И чтобы была возможность отредактировать его. Какие есть варианты ?
|
|
|
Новых ответов нет
[см. все]
|
|
|
| |
Пост N: 2811
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.03.13 12:21. Заголовок: В MEMO перенеси..
В MEMO перенеси
|
|
|
|
| постоянный участник
|
Пост N: 848
Зарегистрирован: 27.01.07
|
|
Отправлено: 20.03.13 13:01. Заголовок: Андрей, тогда точно ..
Андрей, такой exe-шник будет хитом №1 у ВСЕХ антивирусов... :)
|
|
|
|
| постоянный участник
|
Пост N: 169
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.03.13 13:51. Заголовок: Andrey пишет:Хочется..
Andrey пишет: цитата: | Хочется перенести INI-файл внутрь EXE-ника |
| Скрытый текст
================================= RC pvn.lv CUSTOM Pvn.lv pvn.ru CUSTOM Pvn.ru pvn0.dbf CUSTOM Pvn0.dbf ================================= применение Res2File(Self:LANGINI, lower("PVN"+"."+Self:LANG)) // языковые ini файлы LV / RU ================================= HB FUNCTION Res2File( cFile, cRes, cTip ) // Ресурс по имени в файл (если файла нет) LOCAL j, l IF file(cFile); RETURN .T. ENDIF Default cTip To "CUSTOM" j := bkApi_LoadResource(bkApi_GetInst(), cRes, cTip) l := ! empty(j) .and. valtype(j) == "C" IF l; hb_memowrit(cFile, j) ENDIF RETURN l // В MiniGui есть функция GetInstance(), похоже ее можно использовать вместо BKAPI_GETINST() ================================= C #define HB_OS_WIN_USED #include "hbapi.h" #include "hbapierr.h" #include "hbwinuni.h" #include "hbwapi.h" HB_FUNC( BKAPI_LOADLIBRARY ) { LPSTR pLib; HINSTANCE hInst; // Указатель загруженой либы pLib = ( LPSTR ) hb_parc(1); hInst = LoadLibraryEx( pLib, NULL, LOAD_LIBRARY_AS_DATAFILE); hb_retptr( hInst ); } HB_FUNC( BKAPI_FREELIBRARY ) { HINSTANCE hInst; hInst = ( HINSTANCE ) hb_parptr( 1 ); if( hInst!=NULL ) FreeLibrary( hInst ); } HB_FUNC( BKAPI_LOADRESOURCE ) { HINSTANCE hInst; HRSRC hRes; HGLOBAL hMem; void *pMem; char Name[256]; char Type[256]; char *pName, *pType; DWORD i,k; hInst = ( HINSTANCE ) hb_parptr( 1 ); if(hInst==NULL) { hb_retclen("",0); return ; } memset(Name, 0, 256); memset(Type, 0, 256); pName = (char *) hb_parc(2); k = hb_parclen(2); k = (k < 256)? k : 255; for(i=0;i<k;i++) Name = *pName++; pType = (char *) hb_parc(3); k = hb_parclen(3); k = (k < 256)? k : 255; for(i=0;i<k;i++) Type = *pType++; hRes = FindResource( hInst, Name, Type); if( hRes==NULL ){ hb_retclen("",0); return ; } hMem = LoadResource( hInst, hRes); if( hMem==NULL ){ hb_retclen("",0); return ; } pMem = LockResource( hMem ); if( pMem==NULL ){ hb_retclen("",0); return ; } k = SizeofResource( hInst, hRes ); hb_retclen( ( char * ) pMem, k); } HB_FUNC ( BKAPI_GETINST ) { HINSTANCE hInst; HANDLE hInstance = NULL; hb_winmainArgGet( &hInstance, NULL, NULL ); hInst = ( HINSTANCE ) hInstance; hb_retptr( hInst ); }
|
|
|
|
|
| постоянный участник
|
Пост N: 171
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.03.13 15:01. Заголовок: SergKis пишет:Скрыты..
SergKis пишет: Не уследил за [ i ] - текст исказился. Повторю часть: pName = (char *) hb_parc(2); k = hb_parclen(2); k = (k < 256)? k : 255; for(i=0;i<k;i++) Name[ i ] = *pName++; pType = (char *) hb_parc(3); k = hb_parclen(3); k = (k < 256)? k : 255; for(i=0;i<k;i++) Type[ i ] = *pType++;
|
|
|
|
| постоянный участник
|
Пост N: 2760
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.03.13 15:26. Заголовок: PSP пишет: Андрей, ..
PSP пишет: цитата: | Андрей, такой exe-шник будет хитом №1 у ВСЕХ антивирусов... :) |
| Почему ? SergKis СПАСИБО БОЛЬШОЕ ! Буду разбираться....
|
|
|
|
| постоянный участник
|
Пост N: 849
Зарегистрирован: 27.01.07
|
|
Отправлено: 20.03.13 15:30. Заголовок: Andrey пишет: Почем..
Andrey пишет: Ты же хочешь Andrey пишет: цитата: | чтобы была возможность отредактировать его |
| Как должен антивирус реагировать на то, что некий exe-файл вдруг изменился? :)
|
|
|
|
| постоянный участник
|
Пост N: 2761
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.03.13 15:33. Заголовок: PSP пишет: Как долж..
PSP пишет: цитата: | Как должен антивирус реагировать на то, что некий exe-файл вдруг изменился? :) |
| Да нормально... Каспер при изменении ЕХЕ-ника заново его сканирует и потом выдает, что все ок ! А у других тоже так же должно быть... Вообще то это разовая операция, настроил и забыл....
|
|
|
|
| постоянный участник
|
Пост N: 2762
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.03.13 15:37. Заголовок: SergKis пишет: pvn0..
SergKis пишет: Смотрю даже dbf-ку в ресурсы затолкали... Классно !
|
|
|
|
| постоянный участник
|
Пост N: 172
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.03.13 15:40. Заголовок: PSP пишет:такой exe-..
PSP пишет: цитата: | такой exe-шник будет хитом №1 у ВСЕХ антивирусов... |
| Давно использую такую штуку, как хранение первоначальных настроек программы в dll или exe и пока все OK!
|
|
|
|
| Администратор
|
Пост N: 2774
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.03.13 09:55. Заголовок: SergKis пишет: Давн..
SergKis пишет: цитата: | Давно использую такую штуку, как хранение первоначальных настроек программы в dll или exe и пока все OK! |
| Для этого достаточно оператора: Параметр := if( ЕстьПараметр, ЕгоЗначение, ЗначениеПоУмолчанию ) У меня определяется массив вида: { {ИмяПараметра, ЗначениеПоУмолчанию }, ... } При старте программы я считываю конфигурацию из dbf+fpt, если параметр есть - беру его значение, иначе - значение по уполчанию. Это и есть первоначальные настройки программы. При изменении значения параметра записываю его в dbf+fpt Зачем делать лишний подарок антивирусам в виде самомодифицирующихся exe ? У них и так тяжелая работа.
|
|
|
|
| постоянный участник
|
Пост N: 179
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.03.13 12:47. Заголовок: Pasha пишет:У меня о..
Pasha пишет: цитата: | У меня определяется массив вида: { {ИмяПараметра, ЗначениеПоУмолчанию }, ... } При старте программы я считываю конфигурацию из dbf+fpt, если параметр есть - беру его значение, иначе - значение по уполчанию. Это и есть первоначальные настройки программы. При изменении значения параметра записываю его в dbf+fpt Зачем делать лишний подарок антивирусам в виде самомодифицирующихся exe ? У них и так тяжелая работа. |
| Можно делать как угодно и так и по другому - как кто считает удобным. Имея любой др.файл к exe надо контролировать соответствие версии их, т.к. сколько угодно раз делают exe один, а файл другой оставляют или наоборот - проблемы телефонные начинаются. Языковые ini выгрузил, потом пользовтели меняют тексты под себя, зашитое в программу не поменяешь, потом dbf - разработанная форма (по департаменту) с формулами, константами, с правилами отбора, таких объектов набирается ..., есть xml-ы с алгоритмами к печатям, для получения др. xml на export - все это удобно относить к той версии exe к которой они разработаны. Если добавил функцию в prg или png, bmp в ресурсы и собрал new exe - разве от этого получается самомодифицирующихся exe ? На лету никогда exe не модифицировал и не собираюсь.
|
|
|
|
|
| постоянный участник
|
Пост N: 3287
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.03.14 20:08. Заголовок: SergKis пишет: // В..
SergKis пишет: цитата: | // В MiniGui есть функция GetInstance(), похоже ее можно использовать вместо BKAPI_GETINST() |
| А как ? Почему то эти функции в МиниГуи не собираются. SergKis пишет: А почему CUSTOM ? В BCC советуют использовать RCDATA ... http://www.sources.ru/cpp/faqs/75.htm
|
|
|
|
| постоянный участник
|
Пост N: 290
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.03.14 22:29. Заголовок: Andrey пишет:А почем..
Andrey пишет: Исторически сложилось с VO 2.0. GetInstance() сам не использую, но давно смотрел по тексту - было как bkApi_GetInst(). цитата: | Почему то эти функции в МиниГуи не собираются |
| добавил их в пример IconAssociatedFile demo4.prg бросил hbwapi.h из Harbour\contrib\hbwin к demo4.prg ... все собралось.
|
|
|
|
| постоянный участник
|
Пост N: 3289
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.03.14 23:15. Заголовок: SergKis пишет: брос..
|
|
|
|
| постоянный участник
|
Пост N: 291
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.03.14 00:14. Заголовок: Andrey пишет:В BCC с..
Andrey пишет: цитата: | В BCC советуют использовать RCDATA ... |
| для хранения exe в ресурсах, наверно, надо использовать RCDATA, а не CUSTOM. Сам такое не использую.
|
|
|
|
| постоянный участник
|
Пост N: 3290
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.03.14 01:30. Заголовок: SergKis пишет: для ..
SergKis пишет: цитата: | для хранения exe в ресурсах, наверно, надо использовать RCDATA, а не CUSTOM. |
| Сделал пример, заработало - http://files.mail.ru/B87770D830CC41B68F1523B400924877 Для ехе тоже можно использовать CUSTOM. Но вот прикол, BCC 5.5.1 НЕ МОЖЕТ ИСПОЛЬЗОВАТЬ фаил .RES если он больше 1Мб (или чуть меньше), т.е. суммарный объем ресурсов не должен превышать этот размер. НЕ ЛИНКУЕТСЯ ресурсный файл, выдает ошибку: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Fatal: Access violation. Link terminated. hbmk2[demo]: Error: Running linker. 2
|
|
|
|