Delete Self - Procedure to close and delete the current application

Post date: Mar 8, 2010 6:26:41 PM

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.