Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.30;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.02 c
1-96828
Nehto
2003-01-20 14:54
2003.01.30
Ассоциации файлов


4-97073
FooJar
2002-12-15 09:48
2003.01.30
Синтаксис mailto в Win


1-96872
viper
2003-01-21 12:08
2003.01.30
ClassName


3-96632
mate
2003-01-14 10:03
2003.01.30
DBGrid и StringGrid


3-96638
Vladimir
2003-01-14 15:10
2003.01.30
Компонент выполняющий скрипт...