Добавить в закладки
Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Вход

Забыли пароль?

Последние темы
Счетчики
Rambler's Top100
Все файлы, находящиеся на сайте, были найдены в сети Интернет как свободно распространяемые и добавлены исключительно в ознакомительных целях.
Перепечатка материалов (в любом виде) с данного сайта без письменного разрешения администратора запрещена.
Copyright ©2010-2011 Mine.ChudoForum.Ru - Все права защищены

Как программе удалить саму себя

Предыдущая тема Следующая тема Перейти вниз

Как программе удалить саму себя

Сообщение автор den в Чт Апр 21 2011, 14:07

Первый способ:
uses
Windows, SysUtils;

procedure DeleteMe;
var
BatchFile: TextFile;
BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
{ создаём бат-файл в директории приложения }
BatchFileName := ExtractFilePath(ParamStr(0)) + '$$336699.bat';

{ открываем и записываем в файл }
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);

Writeln(BatchFile, ':try');
Writeln(BatchFile, 'del "' + ParamStr(0) + '"');
Writeln(BatchFile,
'if exist "' + ParamStr(0) + '"' + ' goto try');
Writeln(BatchFile, 'del "' + BatchFileName + '"');
CloseFile(BatchFile);

FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_HIDE;

if CreateProcess(nil, PChar(BatchFileName), nil, nil,
False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
end;

А вот тот же способ, но немного модифицированный:

program delete2;

uses
SysUtils,
windows;

var
BatchFile: TextFile;
BatchFileName : string;
TM : Cardinal;
TempMem : PChar;

begin
BatchFileName:=ExtractFilePath(ParamStr(0))+ '$$336699.bat';


AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);

Writeln(BatchFile,':try');
Writeln(BatchFile,'del "' + ParamStr(0) + '"');
Writeln(BatchFile,'if exist "' + ParamStr(0) + '" goto try');
Writeln(BatchFile,'del "' + BatchFileName + '"');
CloseFile(BatchFile);

TM:=70;
GetMem (TempMem,TM);
GetShortPathName (pchar(BatchFileName), TempMem, TM);
BatchFileName:=TempMem;
FreeMem(TempMem);

winexec(Pchar(BatchFileName),sw_hide);
halt;
end.
avatar
den
Модератор
Модератор

Сообщения : 36
Благодарности : 11

Посмотреть профиль http://mine.chudoforum.ru

Вернуться к началу Перейти вниз

Re: Как программе удалить саму себя

Сообщение автор den в Чт Апр 21 2011, 14:07

Второй способ:

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;

avatar
den
Модератор
Модератор

Сообщения : 36
Благодарности : 11

Посмотреть профиль http://mine.chudoforum.ru

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения