Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2007, 22:37   #1
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию КАК делать обновления к програме?

люди здароФФ всем) у меня такой вопрос:
Я видел что есть ехе-файлы ОБНОВЛЕНИЯ (например обновление на игрушку) там получается что файл както вписуется в существующий файл и изменяет его код или как?
ВОТ ЕТОТ ВОПРОС МЕНЯ И ИНТЕРЕСУЕТ
КАК ДЕЛАТЬ ОБНОВЛЕНИЯ К ПРОГРАМАМ?
(ВАРИАНТ: Создать новый ехе-код , откомпилировать и просто заменить не подходит! )
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 30.11.2007, 02:03   #2
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Доброе время суток!!!
А что в принцепи интерисует!?
'Взлом програм','Дополнение и испровление собственной программы'!?
Вариантов много, например взлом
А дополнение и испровление ошибок восновно делается так:
Если глобальное испровление пишим новыи исполняимый файл и рисурсы которые он использует!
Если в процесе тестированья обноружились ошибки то испровляем их написав новый исполняимый файл и по байтова сравнюем с оригиналом записуем разницу 'есть для этих целей специальные проги коректоры тобиш патчеры'!
Примерно так!!!
С уважением Volkogriz!!!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 30.11.2007, 03:58   #3
KORN
Банхаммер
Участник клуба
 
Аватар для KORN
 
Регистрация: 17.02.2007
Сообщений: 1,754
По умолчанию

по моему мнению лучше написать отдельную программу для обновления и при ее запуске закрывается основная программа... это в том случае если надо обновить главный файл... если нет то тогда на сервере создаем файл в котором указываем какие файлы надо качать... вот и все
Перед тем как спросить ищи на форуме и в GOOGLE
KORN вне форума Ответить с цитированием
Старый 30.11.2007, 07:06   #4
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
по моему мнению лучше написать отдельную программу для обновления и при ее запуске закрывается основная программа... это в том случае если надо обновить главный файл... если нет то тогда на сервере создаем файл в котором указываем какие файлы надо качать... вот и все
иными словами ничего...

Развиваю мысль Volkogriz, когда вы найдёте разницу между старой и новой версией, напишите программу, которая в нужные места дописывает нужные байты. (Т.е. прорамма должна создасть новый файл, и будет (**) переписывать в него весь старый файл до тех пор, пока не дойдёт до отличия, потом запишет то, что нужно, а потом goto **).
Соответственно главная проблема, создать "карту" отличий файлов, и уместить её в своей программе. Здесь уже дело в вашей фантазии, но цель - чтоб работало и размер был как можно меньше.
zetrix вне форума Ответить с цитированием
Старый 30.11.2007, 09:00   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Вариант с картой файла и слиянием действительно самый правильный со стороны задачи, но не самый правильный со стороны причины самой задачи: если у вас проект, который будет обновляться, выносите функции и процедуры, которые будут меняться в DLL , так же собственно можно и поступить с формами, которые будут подвергаться обновлению, чтобы обновление не мешало работе самой программы. Хотя вариант с слиянием двух файлов конечно гораздо красивей )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 30.11.2007, 16:06   #6
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Посмотри здесь, может поможет.
А вот еще кое-что из делфиворлд:
Код:
Хранение данных в EXE-файле
Вы можете включить любой тип данных как RCDATA или пользовательских тип ресурса. Это очень просто. Данный совет покажет вам общую технику создания такого ресурса. Type TStrItem = String[39]; { 39 символов + байт длины -> 40 байтов } TDataArray = Array [0..7, 0..24] of TStrItem; Const Data: TDataArray = ( ('..', ...., '..' ), { 25 строк на строку } ... { 8 таких строк } ('..', ...., '..' )); { 25 строк на строку } Данные размещаются в вашем сегменте данных и занимают в нем 8K. Если это слишком много для вашего приложения, поместите реальные данные в ресурс RCDATA. Следующие шаги демонстрируют данный подход. Создайте небольшую безоконную программку, объявляющую типизированную константу как показано выше, и запишите результат в файл на локальный диск: program MakeData; type TStrItem = string[39]; { 39 символов + байт длины -> 40 байтов } TDataArray = array[0..7, 0..24] of TStrItem; const Data: TDataArray = ( ('..', ...., '..'), { 25 строк на строку } ... { 8 таких строк } ('..', ...., '..')); { 25 строк на строку } var F: file of TDataArray; begin Assign(F, 'data.dat'); Rewrite(F); Write(F, Data); Close(F); end. Теперь подготовьте файл ресурса и назовите его DATA.RC. Он должен содержать только следующую строчку: DATAARRAY RCDATA "data.dat" Сохраните это, откройте сессию DOS, перейдите в каталог где вы сохранили data.rc (там же, где и data.dat!) и выполните следующую команду: brcc data.rc (brcc32 для Delphi 2.0) Теперь вы имеете файл data.res, который можете подключить к своему Delphi-проекту. Во время выполнения приложения вы можете генерировать указатель на данные этого ресурса и иметь к ним доступ, что и требовалось. { в секции interface модуля } type TStrItem = string[39]; { 39 символов + байт длины -> 40 байтов } TDataArray = array[0..7, 0..24] of TStrItem; PDataArray = ^TDataArray; const pData: PDataArray = nil; { в Delphi 2.0 используем Var } implementation {$R DATA.RES} procedure LoadDataResource; var dHandle: THandle; begin { pData := Nil; если pData - Var } dHandle := FindResource(hInstance, 'DATAARRAY', RT_RCDATA); if dHandle <> 0 then begin dhandle := LoadResource(hInstance, dHandle); if dHandle <> 0 then pData := LockResource(dHandle); end; if pData = nil then { неудача, получаем сообщение об ошибке с помощью WinProcs.MessageBox, без помощи VCL, поскольку здесь код выполняется как часть инициализации программы и VCL возможно еще не инициализирован! } end; initialization LoadDataResource; end. Теперь вы можете ссылаться на элементы массива с помощью синтаксиса pData^[i,j].
© Автор: Peter Below //позволю себе вмешаться, zetrix

Последний раз редактировалось zetrix; 30.11.2007 в 17:32.
bill вне форума Ответить с цитированием
Старый 30.11.2007, 21:30   #7
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Программу для создания патчей можно использовать готовую, например, Sign 0f Misery ищет отличия в файлах программы и создает патч, но прктически все программы, те что распространяются через Инет, чем-то сжаты, например, UPX. Поэтому в них размер отличий будет примерно равен размеру программы, т.е. практически не будет совпадающих фрагментов кода. Так что лучше менять файлы целиком, либо придется перед изменением распаковывать файл.
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновления WindowsXP bizpartner Софт 8 19.08.2008 18:47
Банер к програме Witaliy Фриланс 5 26.07.2008 21:46
помогите найти ошибку в програме не работает в делфи SYL@R Помощь студентам 4 04.07.2008 12:28
Помогите пожалуйста исправить ошыбки в програме(Pascal) DEN_DENZEL Помощь студентам 0 06.06.2008 22:04
Как добавить сведенья о програме в реестр SeRhy Общие вопросы Delphi 4 06.01.2008 13:27