Текущий архив: 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