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

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Если вы решили удалить Windows, сделайте это медленно с удовольствием, побайтно…

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.

{/codecitation}

Добавить комментарий