Форум: "Потрепаться";
Текущий архив: 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.008 c