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