Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Программа которая будет менять "саму себя"

60K
17 июня 2010 года
mmtechslv
7 / / 17.06.2010
Здравствуйте
Есть такой вопрос
Как сделать программу которая будет менять "саму себя" на ходу
Как я понял ресурсы менять на ходу нельзя
Вот я нашел типа решение и хотел бы узнать на сколько оно правильно
Так как мне надо типа кучу данных(включая настройки) держать внутри самого exe которые будут меняться каждый раз при закрытии программы
вот я решил что можно добавлять все эти данные в конец exe файла
и я хотел бы узнать можно ли так и не вызовет ли это каких либо проблем
при работе программы(хотя все работает ПОКА...) и есть ли какие либо другие варианты

Заранее всем большое спасибо
253
17 июня 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: mmtechslv

Как я понял ресурсы менять на ходу нельзя


Уверен в этом? Через UpdateResource, к примеру.

Даже если и нельзя менять работающую программу менять, то всегда можно её скопировать, изменить ресурс, запустить её и выйти из проги, которая ресурс изменила. Ну, а запущенная прога (изменённая) переписывает себя на место старой.

Только зачем тебе нужно настройки хранить в самом образе? Для этого же есть реестр или ini.

60K
17 июня 2010 года
mmtechslv
7 / / 17.06.2010
Цитата: Proger_XP

Даже если и нельзя менять работающую программу менять, то всегда можно её скопировать, изменить ресурс, запустить её и выйти из проги, которая ресурс изменила. Ну, а запущенная прога (изменённая) переписывает себя на место старой.



Да я уже о вспомогательной программы уже поразмышлял просто не хочется разжирять программку а то он у меня на диете :)

А еще то что я написал насчет конца файла это потом при работе программы не выявит проблем хотя вообще это неправильно но я все таки решил а вдруг...:)

253
18 июня 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: mmtechslv
Да я уже о вспомогательной программы уже поразмышлял просто не хочется разжирять программку а то он у меня на диете :)


Чем ты её утяжелишь? Добавь проверку командной строки ("--after-update"), десять строчек кода, чтобы переписать себя на место предыдущего ехе, и всё - никаких дополнительных ресурсов тебе не нужно.

Цитата: mmtechslv
хотя вообще это неправильно но я все таки решил а вдруг...:)


Ты лучше "всё-таки реши" попробовать UpdateResource опытным путём, а вдруг?

60K
18 июня 2010 года
mmtechslv
7 / / 17.06.2010
Можно и так :)
Большое спасибо за ответы
8.2K
18 июня 2010 года
bagie2
299 / / 26.10.2008
данные, что находятся в конце PE-файла называются оверлей и почти все однофайловые дистрибутивы так организованы, цифровая подпись туда же записывается и т.д. так что бояться тут нечего.

а идея с переписыванием своего исполняемого файла мне очень не нравится. в чем смысл поподробнее расскажите. это portable-версия программы?
60K
18 июня 2010 года
mmtechslv
7 / / 17.06.2010
Цитата: bagie2
данные, что находятся в конце PE-файла называются оверлей и почти все однофайловые дистрибутивы так организованы, цифровая подпись туда же записывается и т.д. так что бояться тут нечего.



Отлично мне как раз это и надо было узнать :)

Цитата: bagie2

а идея с переписыванием своего исполняемого файла мне очень не нравится. в чем смысл поподробнее расскажите. это portable-версия программы?



Нужно сделать переносимую программу все настройки и все должно быть в самом исполняемом файле. короче да это portable-версия программы.

А в исполняемого файла будет пихаться разные данные может быть >100 КБ ну в зависимости от требовании пользователя, это точно не повлияет на работоспособность программы

7
18 июня 2010 года
@pixo $oft
3.4K / / 20.09.2006
На правах полуоффтопа:
Вы-таки не забывайте,что особо одарённые могут запустить вашу программу с компакт-диска.Ну вы поняли
1
18 июня 2010 года
kot_
7.3K / / 20.01.2000
могут быть проблемы с антивурусами. Я бы посоветовал использовать либо ресурсы, либо формировать файл настроек/писать в реестр.
60K
18 июня 2010 года
mmtechslv
7 / / 17.06.2010
Цитата: @pixo $oft
На правах полуоффтопа:
Вы-таки не забывайте,что особо одарённые могут запустить вашу программу с компакт-диска.Ну вы поняли



Да уж точно я об этом как то не подумал, придется в название программы добавить "НЕ ЗАПУСКАТЬ С ДИСКОВ!!!"

Цитата: kot_
могут быть проблемы с антивурусами. Я бы посоветовал использовать либо ресурсы, либо формировать файл настроек/писать в реестр.



к сожалению реестр не получится нужно чтобы настройки тоже были переносными
А вот если я все таки воспользуюсь ресурсами мне ведь все равно придется и воспользоваться дополнительную программу для обновлении ресурсов так вот на это Антивирус может отреагировать на такие действия или нет?

8.2K
18 июня 2010 года
bagie2
299 / / 26.10.2008
елки палки =) я бы взял зашифрованную локальную базу этот же sdf или mdb кинул рядом с программкой и дело в шляпе, хранил всё что нужно и конфиги и данные любые. какая разница один файл таскать на флешке или два. насчет антивирусов не сказал бы что они ругаются на оверлеи. вот если секцию в конце приклеить к PE-файлу, то да =)

кстати как вам удалось записаться в конец файла, когда он запущен и без перемещения и других трюков?
60K
18 июня 2010 года
mmtechslv
7 / / 17.06.2010
Цитата: bagie2
елки палки =) я бы взял зашифрованную локальную базу этот же sdf или mdb кинул рядом с программкой и дело в шляпе, хранил всё что нужно и конфиги и данные любые. какая разница один файл таскать на флешке или два. насчет антивирусов не сказал бы что они ругаются на оверлеи. вот если секцию в конце приклеить к PE-файлу, то да =)



Мне просто очень хочется таскать один файл а не два:)
Ладно буду искать решение дальше.

Цитата: bagie2

кстати как вам удалось записаться в конец файла, когда он запущен и без перемещения и других трюков?


Я над этим работаю :D

Как только найду решение обязательно напишу.

1
18 июня 2010 года
kot_
7.3K / / 20.01.2000
Просто вариант с записью в конец файла сам по себе достаточно непростой, и чреват ошибками. Помимо того, это будет менять контрольную сумму и т.п. - что может вызвать ругань антивиря.
Поэтому проще устанавливать настройки программно - а после первого запуска сохранять их общепринятым способом для конкретного пользователя.
Это вполне нормальное поведение для портабл-программ - в конце концов
1) реализуйте несколько наиболее удобных профилей для работы, и в случае если не можете найти настроек на компьютере, предлагайте пользователю их. Зачем пытаться прыгать выше головы? Не нужно ничего хранить и таскать.
2) создать возможность гибкого управления запуском, что бы все необходимые настройки можно было бы передать через командную строку. В том числе и указать какой профиль хотел бы пользователь использовать. Вполне удобно, если мне полюбилась какая либо конфигурация - я найду силы и создам ярлык либо батник для запуска.
3) пытаться реализовать оверлеи и прочиие извращения - выбор стандартного Windows-way - через зопу к собственным велосипедам.
Третий вариант плох еще тем, что так либо иначе, до вас дойдет информация о существовании exe-упаковщиков. :) И может существенно усложнить жизнь вам - потому как решение вполне очевидное - и позволяет существенно снизить размер программы, что для портабл-программ не маловажно. Будет весьма приятно обнаружить, что после сжатия программа работает совсем не так как ожидалось.
Да и вообще - относительная сложность данного решения имхо несопоставима с полученными преимуществами - ведь все это еще отнюдь не подрозумевает идеального исполнения.
Ну хотя решать конечно вам.
5
18 июня 2010 года
hardcase
4.5K / / 09.08.2005
[COLOR=Silver]Неделя хацкеров на коднете?[/COLOR]
60K
18 июня 2010 года
mmtechslv
7 / / 17.06.2010
Цитата: kot_
Просто вариант с записью в конец файла сам по себе достаточно непростой, и чреват ошибками. Помимо того, это будет менять контрольную сумму и т.п. - что может вызвать ругань антивиря.
Поэтому проще устанавливать настройки программно - а после первого запуска сохранять их общепринятым способом для конкретного пользователя.
Это вполне нормальное поведение для портабл-программ - в конце концов
1) реализуйте несколько наиболее удобных профилей для работы, и в случае если не можете найти настроек на компьютере, предлагайте пользователю их. Зачем пытаться прыгать выше головы? Не нужно ничего хранить и таскать.
2) создать возможность гибкого управления запуском, что бы все необходимые настройки можно было бы передать через командную строку. В том числе и указать какой профиль хотел бы пользователь использовать. Вполне удобно, если мне полюбилась какая либо конфигурация - я найду силы и создам ярлык либо батник для запуска.
3) пытаться реализовать оверлеи и прочиие извращения - выбор стандартного Windows-way - через зопу к собственным велосипедам.
Третий вариант плох еще тем, что так либо иначе, до вас дойдет информация о существовании exe-упаковщиков. :) И может существенно усложнить жизнь вам - потому как решение вполне очевидное - и позволяет существенно снизить размер программы, что для портабл-программ не маловажно. Будет весьма приятно обнаружить, что после сжатия программа работает совсем не так как ожидалось.
Да и вообще - относительная сложность данного решения имхо несопоставима с полученными преимуществами - ведь все это еще отнюдь не подрозумевает идеального исполнения.
Ну хотя решать конечно вам.



Ну что ж попробуем.
А насчет упаковщиков я полагал что можно сделать скомпилировать программы потом упаковать и лишь потом запустить и она прои первом запуске начнет возится с оверлеем так ка программа должна сама автоматически находить конец и все такое или типа того...\
Ну вобшем не важно
Большое ВСЕМ спасибо
С уважением mmtechslv

как только найду окончательное решение напишу

253
18 июня 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: mmtechslv
...и все такое или типа того...\
Ну вобшем не важно


По-моему вы сами не знаете, чего хотите добиться. _kot по-моему хорошо описал что к чему.
[COLOR="Gray"]Главное, чтобы всё было типа того :D[/COLOR]

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог