Este programa não faz uso de interface gráfica(opcional)
Este tutorial reuni Dois em um só.
- Embutir (.EXE) em (.EXE)
- Juntando 2 (.EXE) em apenas 1
Embutidor
1. Crie um arquivo chamado (EMBUTIR.rc)
2. Abra-o com o Bloco de Texto e escreva:
Quote
EXTRA EXEFILE C:\EXTRA.EXE
EMAIL EXEFILE C:\EMAIL.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 seu Resource.
5.Leve ele até a pasta onde está seu Projeto (.dpr) e coloque no seu Código da Unit.pas onde tem:
Quote
(...)
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
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:
Quote
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R EXE.RES}
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.
Quote
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;
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.':
Quote
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;
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:
- Código:
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:
Quote
Application.CreateForm(TForm1, Form1);
O código:
Quote
Application.ShowMainForm:=False; //Não mostra o programa
Seu source deve fica +- assim:
Quote
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm:=False;
Application.Run;
end.
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm:=False;
Application.Run;
end.
Boa Aprendizagem!
by Psy