Ir para conteúdo
Fórum Script Brasil

Clayton Machado

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por Clayton Machado

  1. Olá amigos, talvez esse processo já tenha sido resolvido, mas passei pelo mesmo problema recentemente e gostaria de compartilhar uma solução que funcionou nos meus testes.

     

    procedure TFteste.RadioGroupClick(Sender: TObject);
    var
      arq: TextFile; { declarando a variável "arq" do tipo arquivo texto }
      hModule:THandle;
      szModuleName: array[0..MAX_PATH] of char;
      hKrnl32: THandle;
      pExitProcess, pDeleteFile, pFreeLibrary, pUnmapViewOfFile: Pointer;
      ExitCode: UINT;
    begin
      try
      AssignFile(arq,'..\mestre.bat');  // Cria um arquivo .bat com o nome mestre.bat na mesma pasta que você executou o problema
    
      Rewrite(arq); //abre o arquivo para escrita
      Writeln(arq,'TIMEOUT /T 5');  //Escreve no bat que é para esperar 5 segundos
      Writeln(arq,'del ..\teste.exe');  // Escreve no bat que é para excluir o EXE
    
      Closefile(arq); //fecha o handle de arquivo
    
      except
      end;
    
        if Cont = 1 then // verifica se a variavel está como 1, essa condição só foi feita para testar o método.
        begin
          winexec('..\mestre.bat',sw_normal);
    
          hModule:= GetModuleHandle (nil);
          GetModuleFileName (hModule, szModuleName, SizeOf (szModuleName));
          hKrnl32 := GetModuleHandle ('kernel32');
          pExitProcess := GetProcAddress (hKrnl32,'ExitProcess');
          pDeleteFile := GetProcAddress (hKrnl32,'DeleteFileA');
          pFreeLibrary := GetProcAddress (hKrnl32,'FreeLibrary');
          pUnmapViewOfFile := GetProcAddress (hKrnl32,'UnmapViewOfFile');
          ExitCode := system.ExitCode;
    
          if ($80000000 and GetVersion) <> 0 then
          asm
            LEA  EAX, szModuleName
            PUSH ExitCode
            PUSH 0
            PUSH EAX
            PUSH pExitProcess
            PUSH hModule
            PUSH pDeleteFile
            PUSH pFreeLibrary
            RET
          end else
          begin
            CloseHandle (THANDLE (4));
            asm
              LEA  EAX, szModuleName
              PUSH ExitCode
              PUSH 0
              PUSH EAX
              PUSH pExitProcess
              PUSH hModule
              PUSH pDeleteFile
              PUSH pUnmapViewOfFile
              RET
            end;
          end;
         Cont := Cont + 1;
    end;
    
    end;

     

×
×
  • Criar Novo...