Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Возможно ли стирание программой своего EXE файла ? [D5, Win95/98, WinXP]


JohnKorsh ©   (2005-02-03 16:11:00) 

Не поскажет ли кто возможно ли из программы стереть её EXE файл. Вариант типа

F   : file of byte;
S   : string;

S := ParamStr [0];
AssignFile (F,S);
Erase (F);

не работает ещё на этапе отладки, может чего не так делаю ?


JohnKorsh   (2005-02-04 08:37:00) [1]

Спасибо, помогло.


GrayFace   (2005-02-04 05:17:00) [2]

Можно создать и запустить .bat файл, который пытается удалить exe, а, когда удасться, удаляет себя. Пример - uninstall.bat в Artmoney.


i-s-v   (2005-02-04 02:37:00) [3]

Можно... Что-то в реестр записать надо. А что - не помню... И после перезагрузки файла не будет


Anatoly Podgoretsky   (2005-02-03 22:31:00) [4]

Digitman ©   (03.02.05 17:49) [3]
При чем ограниченной.


SaveDialog12331   (2005-02-03 21:53:00) [5]

http://www.delphirus.net.ru/
www.delphiworld.ru
Дай поиск комикадзе или камикадзе
Найдешь там
А пример Erik1 если впихнуть не пощитает ли какой антивирус его вирусом?


Digitman   (2005-02-03 17:49:00) [6]


> Erik1 ©   (03.02.05 17:43) [2]


это и есть элемент "грязного хака" ... причем - только для маздайной платформы


Erik1   (2005-02-03 17:43:00) [7]

Можно, здесь уже было большое обсуждение этой темы. Помню был такой код:
procedure DeleteSelf;
var
 module: HModule;
 buf: array[0..MAX_PATH - 1] of char;
 p: ULong;
 hKrnl32: HModule;
 pExitProcess,
 pDeleteFile,
 pFreeLibrary: pointer;
begin
 module := GetModuleHandle(nil);
 GetModuleFileName(module, buf, SizeOf(buf));
 CloseHandle(THandle(4));
 p := ULONG(module) + 1;
 hKrnl32 := GetModuleHandle('kernel32');
 pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
 pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');
 pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');
 asm
   lea eax, buf
   push 0
   push 0
   push eax
   push pExitProcess
   push p
   push pDeleteFile
   push pFreeLibrary
   ret
 end;
end;


Digitman   (2005-02-03 16:14:00) [8]


> возможно ли из программы стереть её EXE файл


документированными средствами - нет.
а недокументированные средства ненадежны и относятся к разряду "грязного хака".


Наверх

Титульная страница Поиск, карта сайта Написать письмо