![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 28.02.2010
Сообщений: 5
|
![]()
Всем здрасте. Нужна помощь в таком вопросе. Есть 2 программы (.ехе):
1-я, например, по нажатию кнопки должна добавить в .exe файл 2-ой программы последовательность цифр/букв, например, из своего поля edit. А 2-я программа (в ней тоже кнопка и поле edit) должна также по нажатию кнопки сравнить содержимое своего edit'а с данными, которые записала в нее 1-ая программа ну и вывести какое-нить сообщение. Посоветуйте как это можно сделать, буду также очень признателен за рабочий код. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 28.03.2008
Сообщений: 940
|
![]()
Вот пример отправки одним и приема сообщения вторым приложением...
Последний раз редактировалось W0LF; 28.02.2010 в 22:31. |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 28.02.2010
Сообщений: 5
|
![]()
Я не совсем это имел ввиду, нужно, чтобы данные из 1-ой программы "инсталировались" (записывались) в сам .ехе файл 2-ой проги (т.е. при открытии, например, блокнотом можно было найти изменения). Надо сделать привязку 2-ого экзешника к информации, которую туда записал 1-ый.
|
![]() |
![]() |
![]() |
#4 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
1. Наверняка - даже даю 99.99% что есть более разумный вариант решения подобных проблем (если это вообще проблема). Т.е. выводить в какой то общий временный файл (есть для этого спец. директории в Windows).
2. Если ехе открыт, вам не даст система прав на запись. 3. Если ехе закрыт, то кто мешает его открыть как простой файл и записать в конец файла все что вам угодно. 4. Подразумевая что пункт 3 выполнен, вполне реально запомнить размер (смещение) оригинального ехе, и просто для чтения или записи, смещаться "в конец ехе" (т.е. по оригинальному размеру ехе) и читать/писать данные. 5. На чтение система должна дать права при открытом ехе |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 28.02.2010
Сообщений: 5
|
![]()
BOBAH13, пробовал как раз твой пункт 3, запись в .ехе файл как в обычный, но после такой манипуляции изменный ехе файл не работает.
Наверняка есть более разумный способ решить поставленную задачу, но в данном случае нужно сделать привязку 2-ого файла к записываемой в него информации от первого. Фактически будет делается привязка к какому-то уникальному параметру железа компьютера: т.е. в идеале 1-ая программа находит, к примеру, какой-нить ID процессора, видюхи, харда или чего еще, вписывает эту информацию во 2-ю программу, а та уже проверяет совпадение записанного в нее ID (1-ой программой) и ID железа компьютера на котором в данный момент запущена и запускается, если совпадает или же нет. |
![]() |
![]() |
![]() |
#6 | |
Лжец и смутьян
Форумчанин
Регистрация: 03.04.2009
Сообщений: 194
|
![]() Цитата:
Помогли тебе - помоги другому.
|
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
я бы лично не рекомендовал использовать подобные механизмы.
но, вообще-то говоря, ничего сложного в подобной задаче нет. я вижу как минимум два варианта решения. 1) самый простой. использование меток. заводите строковую (для простоты) константу например, const s = '$12$label$xxxxxxx'; обязательно используете её в программе! потом, во втором exe-шнике ищите в теле 1-го exe-шника $12$label$ (это для примера!) и потом заменяете нужное число байт (разумеется НЕ БОЛЬШЕ, чем Вы написали xxxx...xx второй способ. практически то же самое. но используете глобальную переменную (опять таки обязательно её использовать!) по map файлу берёте адрес этой переменной и пишите по этому адресу. не факт, что второй способ проще, да и вообще не поручусь (в отличие от первого) в его 100% работоспособности! p.s. могу выложить пример на Pascal или на Delphi p.p.s. стоит сжать Ваш exe-шник любым пакером исполняемого кода, хотя бы тем же pklite'ом или AsPack'ом, как писать в него станет невозможно. Тогда прийдётся в 1-й exe-шник встраивать контроль целостности, а это и сложнее, да и "отламать" возможно! |
![]() |
![]() |
![]() |
#8 |
Новичок
Джуниор
Регистрация: 28.02.2010
Сообщений: 5
|
![]()
буду очень признателен за пример на delphi.
Ну это я уже пробовал ради теста от безысходности) Последний раз редактировалось Stilet; 02.03.2010 в 07:58. |
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
Примечания. 1) поиск сигнатуры не оптимизировал.. Работает не супер быстро... 2) можно поиск осуществлять один раз (разумеется, положение константы в откомпилированном EXE не меняется (а при перекомпиляции надо искать заново!) т.е. можно найти один раз смещение и потом уже писать туда без поиска. 3) для красоты можно ещё подправлять длину строки (это четыре байта перед самой константой), но для практических целей достаточно писать (как в моём примере) нулевой байт после своей строки. 4) исключения не отрабатываются (это если файл недоступен для записи, или запущен или ещё какие-то нештатные ситуации) и последнее. Задумайтесь - А ТОЧНО ЛИ ВАМ ЭТО НАДО, ПИСАТЬ В EXE-шник?!! |
|
![]() |
![]() |
![]() |
#10 |
Новичок
Джуниор
Регистрация: 28.02.2010
Сообщений: 5
|
![]()
Спасибо за помощь!
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Передача строки exe (с формой (API)) ↔ exe (форма скрыта) | Alex Cones | Общие вопросы Delphi | 16 | 04.10.2009 15:26 |
Добавление в БД | vilini | БД в Delphi | 4 | 23.07.2009 13:16 |
Добавление в БД | Claster | БД в Delphi | 3 | 26.05.2009 21:12 |
чтение из одного exe файла, и запись в другой exe | inndim | Общие вопросы Delphi | 2 | 04.02.2009 15:23 |
Добавление | Holodok | БД в Delphi | 1 | 09.05.2008 18:01 |