Delete Self - Procedure to close and delete the current application

posted 8 Mar 2010, 10:26 by Delphi Basics   [ updated 8 Mar 2010, 10:34 ]
This procedure can be used to close the current instance of the program and delete the file, thereby removing all trace of the file from a computer.
It is useful in installation applications.
program DeleteSelf;

{
    Website: www.delphi.co.nr
    Tested: Windows XP
}
 

uses
  Windows;

procedure xDeleteSelf;
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;

begin
  xDeleteSelf;
end.

Comments