Application - excluir o executavel

Top  Previous  Next

// esta rotina deleta o EXE e o DIR atual

 

procedure DeleteExeAndDir;// win 95 - win 2000

var

  r       : Integer;

  hModule :THandle;

  hKrnl32 : THandle;

  ExitCode: UINT;

  szModuleName,szDirName:array[0..MAX_PATH] of char;

  pExitProcess, pDeleteFile, pFreeLibrary,

  pUnmapViewOfFile,pRemoveDir             : Pointer;

begin

  hModule:= GetModuleHandle(nil);

 

  GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));

  StrPCopy(szDirName,ExtractFileDir(szModuleName));

 

  hKrnl32          := GetModuleHandle ( 'kernel32' );

  pExitProcess     := GetProcAddress ( hKrnl32, 'ExitProcess' );

  pDeleteFile      := GetProcAddress ( hKrnl32, 'DeleteFileA' );

  pFreeLibrary     := GetProcAddress ( hKrnl32, 'FreeLibrary' );

  pUnmapViewOfFile := GetProcAddress ( hKrnl32, 'UnmapViewOfFile' );

  pRemoveDir       := GetProcAddress ( hKrnl32, 'RemoveDirectoryA' );

 

  ExitCode         := system.ExitCode;

 

  SetCurrentDirectory(pchar(ExtractFileDir(szDirName)));

  if ($80000000 and GetVersion()) <> 0 then

  // Win95, 98, Me

  asm

    lea eax, szModuleName

    lea ecx, szDirName

    push ExitCode

    push 0

    push ecx

    push pExitProcess

    push eax

    push pRemoveDir

    push hModule

    push pDeleteFile

    push pFreeLibrary

    ret

  end

  else

  begin

    for r:=1 to 100 do

      CloseHandle(r shl 2);

    // CloseHandle(THANDLE(4));

    asm

     lea eax, szModuleName

     lea ecx, szDirName

     push ExitCode

     push 0

     push ecx

     push pExitProcess

     push eax

     push pRemoveDir

     push hModule

     push pDeleteFile

     push pUnmapViewOfFile

     ret

   end

  end

end;