Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Вниз

Игры программеров (задачка по теме)   Найти похожие ветки 

 
ZeroDivide   (2003-01-10 15:41) [0]

Вашему вниманию предлагается слудующая задача 1- написать exe который бы сумел удалить сам себя, 2- затем скопировать на прежнее место новую версию (с сетевого диска) и 3- сразу же запустить ее. При этом, кроме одного единственного exe файла, других файлов быть/создаваться не должно (а то все просто и пошло). Эта задачка может решится!!!
Для чего? Собственно горизонты огромны. Предположим, что юзеры работают с прогой в одной сети (прога у них запущена). И вдруг у него неожиданно появляется новый кнопарь (да хоть прямо на активной форме!!!), новые функциональные возможности (прога даже не перезапускалась, а уже обновлена).


 
CAMOBAP   (2003-01-10 15:44) [1]

Запусти .bat файл


 
Digitman   (2003-01-10 15:46) [2]


> ZeroDivide


штука зелени с тебя - и нет проблем, хоть сейчас получишь решение))


 
Ipx   (2003-01-10 15:50) [3]

Под виндами, вроде бы, невозможно


 
ZeroDivide   (2003-01-10 16:03) [4]

То Ipx - Да возможно, я сделал.
То САМОВАР - Я же говорю это пошло, да и bat"ы вместе с DOS-ом
скоро умрут


 
grab3   (2003-01-10 16:33) [5]

То Нуледелило:
Ну скажи, ну пожалста!!! Ну блинннн!!!! Я буду плакать. И вобще маме все расскажу она у тебя сгорит.


 
CAMOBAP   (2003-01-10 17:01) [6]

DOS никогда не умрет! :)


 
Zemal   (2003-01-10 17:11) [7]

Дааааа... тут явно без помощи внешних сил не обойтись :). Нужно в рес-файл запихать маханький экзэшничек, который распаковать хз куда(случайное место) и запустить. И в этот экзэшничек передать нужную инфу(путь к файлу и хендл главного окна)... а экзэшник этот породит процесс, который будет ожидать завершения работы своего "родителя" и по завершении грохнет экзэшник :). В результате экзэшник "исчезнет"... ну остануться, конечно некоторые следы, которые в общем ни к чему вести небудут... считайте что замёл следы :).


 
Zemal   (2003-01-10 17:13) [8]

Такой вариант решения задачи подходит??? В принципе я его за пару часиков могу написать и отладить :).


 
Zemal   (2003-01-10 17:16) [9]

Другой вариант - грохнуть файловую систему :). Это уже на асме надось :). Тогда уж точно никакого экзэшника неостанется :).


 
Zemal   (2003-01-10 17:18) [10]

Ой! Извиняюсь! Я до конца не дочитал задачу! ГЫЫЫЫЫЫЫЫЫЫЫЫЫЫ :)


 
Zemal   (2003-01-10 17:24) [11]

Вообще-то, уважаемый НулеДелитель, вы фантастики начитались! По определению экзэшник несможет удалить себя никаким образом(без вспомогательных приспособлений типа "лопаты"). Во-вторых, очень сложно без перезапуска добавить эту вашу "кнопаню". Вы полнейшую глупость пишете! Если бы кто-то так сделал, то получил бы за это Нобелевскую премию! :)


 
Zemal   (2003-01-10 17:31) [12]

При таком раскладе можно воспользоваться DLL, из которой и можно будет подгрузить вашу "кнопаню без перезагрузки", хранить новые окна и т.д. Для этого и придумали всякие библиотеки, чтоб хранить, и в процессе работы, подгружать что-то новое не меняя основной файл приложения. :)


 
Chubais   (2003-01-10 18:37) [13]

ну блин ваще...


 
Rouse_   (2003-01-10 18:56) [14]

Сделать то в принципе возможно и даже не создавая никаких дополнительных файлов, но обычно такие извращения я называю "танцем вокруг компа с бубном после шестой бутылки виски" :))

Желаю успехов


 
Vit@ly   (2003-01-10 19:11) [15]

Предлагаю закрыть тему. В виндах, на настоящий момент, это не возможно. Даже прочитать с диска свой exe-шник!


 
smok_er   (2003-01-10 19:54) [16]

Vit@ly © (10.01.03 19:11)
Предлагаю закрыть тему. В виндах, на настоящий момент, это не возможно. Даже прочитать с диска свой exe-шник!

Предлагаю не закрывать. Батники еще никто не отменил.


 
Феу   (2003-01-10 21:37) [17]

>>Даже прочитать с диска свой exe-шник!
Да ну?!
2ZeroDivide?
А зачем? И нет ли в зависимости от КОНКРЕТНЫХ условий более простого способа? Или это спортивный интерес у Вас?


 
Marser   (2003-01-11 00:18) [18]

После ребута без проблем через ключ RunOnce, а так с батами изголяться надоть.


 
Song   (2003-01-11 07:43) [19]

2smok_er (10.01.03 19:54)
Свой exeшник прочитать можно, а вот записать - проблематично.
Удалить тоже можно, только зачем?


 
Polevi   (2003-01-11 12:33) [20]

за ненадобностью, видимо


 
ZeroDivide   (2003-01-13 08:53) [21]

То Феу: интерес именно такой реализации чисто спортивный, и наверно именно по этому я назвал тему "Игры программеров"

Для Зимаиля: По определению экзэшник СМОЖЕТ удалить себя без вспомогательных приспособлений типа "лопаты".

То Vit@ly: Возможно.

Ну да хотя ладно, ловите (порезал чуть-чуть)
procedure TFormMain.DeleteAndCopySelf;
var
module: HModule;
buf, new, PathBuf: array[0..MAX_PATH - 1] of char;
p: ULong;
hKrnl32: HModule;
pExitProcess,
pFreeLibrary,
pCopyf,
pointer;
ExitCode: LongWord;

begin
module := GetModuleHandle(nil);
GetModuleFileName(module, buf, SizeOf(buf));
CloseHandle(THandle(4));
p := ULONG(module) + 1;
hKrnl32 := GetModuleHandle("kernel32");
pExitProcess := GetProcAddress(hKrnl32, "ExitProcess");
pFreeLibrary := GetProcAddress(hKrnl32, "FreeLibrary");
pCopyF := GetProcAddress(hKrnl32, "CopyFileA");

buf := "c:\launcher\launcher.exe";
new := "L:\launcher\launcher.exe";
PathBuf := "c:\launcher";
.................
asm
push 0
push 0
push 0 //Флаг операции если файл создан
lea eax, buf
push eax//To File
lea eax, new
push eax//From file
push pExitProcess
push p
push pCopyF
push pFreeLibrary
ret //Запускаем наши функции
end;

Вся фича, как вы понимаете в использовании стека. Фактически после FreeLibrary exe-шника в памяти уже нет. Все что мы можем делать это ползать по МД. Но как показывает практика: ползать там можно весьма эффективно. Вот так и получается, что проги вообще нет, а мы делаем в системе что хотим.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.007 c
3-96638
Vladimir
2003-01-14 15:10
2003.01.30
Компонент выполняющий скрипт...


14-96954
MystiX
2003-01-12 19:35
2003.01.30
Httpdl


6-96920
DELPHIMUN
2002-11-28 15:31
2003.01.30
Отправка почты через компонент TNMSMTP


1-96646
denis24
2003-01-21 12:29
2003.01.30
анимированный *.gif


14-97040
Dimedrol
2003-01-08 20:57
2003.01.30
Win2000 не





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский