Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
Kristian

Auto-exclusão

Question

Olá galera,

Ve se é possivel, tenho que executar um programa, que ao final de sua execução ele se auto-exclua. Ou seja se Suicide....

É possivel ?????

Share this post


Link to post
Share on other sites

13 answers to this question

Recommended Posts

  • 0

HUm.. apaga ele mesmo acho que não é possivel, mas você quer apagar uma pasta inteira? Você pode fazer um .bat e chamar ele antes de sair do programa...

Share this post


Link to post
Share on other sites
  • 0

Na verdade este programa é uma espécie de SETUP só que esta dividido em quatro para ficar mais leve para fazer download, é só executar o primeiro e ele por si só executa os demais, só que quando o quarto e ultimo é finalizado, ele precisa excluir os três primeiros e ele própio, só que tava querendo fazer isso sem ter de criar um .bat, nem excluir uma pasta inteira.

Entendeu?

Share this post


Link to post
Share on other sites
  • 0

São todos eles arquivos .exe? Ou são arquivos compactados?

Se for com .exe mesmo, já que você está instalando, não poderia fazer o arquivo instalado apagar esse instalador?

Por exemplo: Ele abre um .exe, fecha a instalação, o programinha apaga a instalação e se fecha. Se voce precisar saber onde estão os arquivos(que pasta) pode até criar um .ini temporario para isso..

Share this post


Link to post
Share on other sites
  • 0

tipo eu entedi, mas pelo que você esta fazendo da forma que você esta querendo fazer talvez não, imagina só ele não pode excluir um arquivo que está em uso, no caso seria o 4º não poderia ser excluido, mas agora se você fizer um bat, fica mais simples porque ele finaliza a sua aplicação e exclui estes arquivos, e você não precisa excluir a pasta basta excluir os arquivos

um exemplo vamos supor que logo apos a aplicaçao você tenha um botao finalizar

ai no evento OnClose do form você coloca para executar o bat ai o que ele vai fazer

entrar na pasta dos arquivos

deletar os arquivos de instalaçao

sair

olha um exemplo de como poderia ficar seu .bat

cd prog

delete setup0*.exe

echo #######################

echo # Finalizando instalação #

echo #######################

Pause

echo #######################

echo # Instalação Finalizada #

echo #######################

echo Por Favor pressione uma tecla para sair

Pause

exit

Abraços e espero ter ajudado

Share this post


Link to post
Share on other sites
  • 0

O problema é que não tenho como mecher no fonte do programa que eu vou instalar, por que é de uma outra empresa, e também não posso fazer em .bat porque vai funcionar da seguinte forma, o nosso cliente entra na pagina, baixa os SETUP's e executa-os só que só Deus sabe onde ele vai baixar os executáveis, ai como eu vou direcionar o .bat para excluir os executáveis?

Sera que não tem nenhuma forma de eu liberar e executével da memória, para deleta-lo?

Share this post


Link to post
Share on other sites
  • 0

Na real é o seguinte....

Eu trabalho em uma empresas que representante de um software muito conceituado no mercado nacional, nós atuamos na região de SC e RS, temos uma rede de mais de 250 clientes nesses dois estados, então a cada vez que sai uma nova versão ou mesmo uma nova release, nós precisamos passar cliente por cliente para atualizar o sistema, e não podemos cobrar nada adicional por isso.

Então me encarregaram de desenvolver um Setup de atualização que o cliente pudesse fazer a atualização sozinho, porem temos que ter certos itens de segurança, como por exemplo excluir o Setup ao final da atualização para evitar copias ilegais.

O Setup já funciona legal só falta configurar alguns desse itens.

Sacou?

Share this post


Link to post
Share on other sites
  • 0

Durante a própria construção do setup, não existe nenhuma opcao para se auto deletar? Que ferramenta voce está usando, ou qual tipo de setup é?

Share this post


Link to post
Share on other sites
  • 0

O Setup foi totalmente desenvolvido por mim em Delphi7, precisei desenvolver um, pois aqueles que existem por ai não atediam as nossas necessidades...

Criei um com caracteristicas própias como por exemplo fazer backup dos dados antes de atualizar o sistema, entre outros...

Share this post


Link to post
Share on other sites
  • 0

faça igual a receita federal crie um Receitanet para cada ano de declaração.....entendeu?

Share this post


Link to post
Share on other sites
  • 0

Também poderia mover os executáveis p/ lixeira.

MoveFile('C:\Temp\Setup.exe','C:\RECYCLED\Setup.exe');

Share this post


Link to post
Share on other sites
  • 0

Já matei a charada se mais aguem precisar é mais ou menos assim....

unit MenuPrincipal;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, dxCore, dxButton,Inifiles;

type

TDriveType = (dtUnknown, dtNoDrive, dtFloppy, dtFixed, dtNetwork, dtCDROM, dtRAM);

TForm1 = class(TForm)

dxButton1: TdxButton;

procedure dxButton1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function GetTmpDir: string;

var

pc: PChar;

begin

pc := StrAlloc(MAX_PATH + 1);

GetTempPath(MAX_PATH, pc);

Result := string(pc);

StrDispose(pc);

end;

procedure DelExe;

function GetTmpFileName(ext: string): string;

var

pc: PChar;

begin

pc := StrAlloc(MAX_PATH + 1);

GetTempFileName(PChar(GetTmpDir), 'EZC', 0, pc);

Result := string(pc);

Result := ChangeFileExt(Result, ext);

StrDispose(pc);

end;

var

batchfile: TStringList;

batchname: string;

begin

if (TDRiveType(GetDriveType(PChar('C:\'))) = dtFloppy) or (TDRiveType(GetDriveType(PChar('C:\'))) = dtFixed) then

begin

batchname := GetTmpFileName('.bat');

FileSetAttr(ParamStr(0), 0);

batchfile := TStringList.Create;

with batchfile do

begin

try

Add(':Label1');

Add('del "' + ParamStr(0) + '"');

Add('if Exist "' + ParamStr(0) + '" goto Label1');

Add('rmdir "' + ExtractFilePath(ParamStr(0)) + '"');

Add('del "' + GetTmpDir + ExtractFileName(ParamStr(0)) + '"');

Add('del ' + batchname);

SaveToFile(batchname);

ChDir(GetTmpDir);

WinExec(PChar(batchname), SW_HIDE);

finally

batchfile.Free;

end;

Halt;

end;

end

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

DelExe;

end;

end.

Valeu pela ajuda.....

Share this post


Link to post
Share on other sites
  • 0

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;

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Cloud Computing


  • Forum Statistics

    • Total Topics
      148593
    • Total Posts
      644162
×
×
  • Create New...