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

Вниз

самоудаление   Найти похожие ветки 

 
GH   (2003-12-12 20:26) [0]

Кто-нибудь знает можно ли на Delphi удалить самого себя, ну т.е. чтобы прога удаляла саму себя? Если да, то как?


 
Agent13   (2003-12-12 21:11) [1]

Саму себя прога удалить не может, поскольку система не даст ей допуска к запущенному (своему же) экзешнику.


 
DDA ©   (2003-12-12 22:19) [2]

Можно вот так



procedure TForm1.FormDestroy(Sender: TObject);
var f:textFile;
FileName:String;
begin
FileName:=changefileext(paramstr(0),".bat");
assignFile(f,FileName);
rewrite(f);
writeln(f,":1");
writeln(f,format("Erase "%s"",[paramstr(0)]));
writeln(f,format("If exist "%s" Goto 1",[paramstr(0)]));
writeln(f,format("Erase "%s"",[FileName]));
closefile(f);
ShellExecute(Handle, "Open", PChar(FileName), nil, nil, sw_hide);
end;


При завершении программы Создает .BAT файл
и когда программа завершится .BAT файл удалит EXE-шник и сам себя
КСТАТИ Взял Где-то на этом сайте


 
Xtz ©   (2003-12-13 01:05) [3]

Совет :
Параметры, заносимые в ключ HKEY_LOCAL_MACHINE\Software\Microsoft\ Windows\CurrentVersion\RunOnce
удаляются после своего выполнения!

Код:
<code/>
uses
Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
with reg do
begin
RootKey := HKEY_LOCAL_MACHINE;
LazyWrite := false;
OpenKey("Software\Microsoft\Windows\CurrentVersion\RunOnce", false);
WriteString("Delete Me!","command.com /c del FILENAME.EXT");
CloseKey;
free;
end;
end;


 
KosilkA ©   (2003-12-13 05:47) [4]

вот рабочий пример безо всяких батников и реестров

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;


 
DDA ©   (2003-12-13 13:25) [5]

KosilkA ©
Возникает ошибка на строке CloseHandle(THandle(4));
если её убрать то прога просто закрывается,а ЕХЕ-шник остаётся


 
Slavian ©   (2003-12-13 14:11) [6]

а можно сделать так:
Скопировать саму себя, сохранить свой путь ы файл, открыть свою копию и закрыться. Копия удаляет оригинал, прописывается в реестре и после перезагрузки то же удаляется.
Эффект самоудаления. я знаю, что не очень красиво, но зато работает!


 
KosilkA ©   (2003-12-13 15:26) [7]


> DDA © (13.12.03 13:25) [5]

а у меня не возникает ,странно...и прекрасно работает


 
DDA ©   (2003-12-13 15:42) [8]

KosilkA ©
А что такое CloseHandle(THandle(4));
т.е что делает-то она
(D6 XP)
в 98 не проверял может и работает


 
KosilkA ©   (2003-12-13 16:06) [9]


> DDA © (13.12.03 15:42) [8]

погоди , ты из под отладчика ЭТО запускаешь? :-)


 
DDA ©   (2003-12-13 16:08) [10]

Какого отладчика?
нету у меня ни чего(Вроде бы)



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

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
9-86239
xman
2003-06-06 11:01
2003.12.26
DelphiX - systemmemory


1-86449
NetKnight
2003-12-13 12:15
2003.12.26
Переобразование Unicode < - > Win


1-86366
-=GaLaN=-
2003-12-15 15:19
2003.12.26
Регистрация, ловля и оправка сообщения


14-86500
REA
2003-12-04 15:09
2003.12.26
Разница между Function и Function()


1-86348
MakNik
2003-12-12 15:23
2003.12.26
CheckBox