Olá galera, nesta Quick Tips, irei mostra como podemos atualizar o executável usando um FTP, ficando assim mais fácil incluir novas rotinas, corrigis bugs, sem ter que mandar para o e-mail do cliente, ou colocar em um link e o mesmo ter que atualizar manualmente.
Inicialmente iremos criar um arquivo no Bloco de Notas(NotePad), e salvar o arquivo como AtualizarExe.bat, feito isso vamos copiar o código abaixo :
@echo off
del "C:\Sistema JMS\JMS.exe"
copy "C:\JMS.exe" "C:\Sistema JMS\"
del "C:\JMS.exe"
echo ###################################
echo ###################################
echo ### ###
echo ### ###
echo ### Sistema foi atualizado com sucesso ###
echo ### ###
echo ### ###
echo ###################################
echo ###################################
pause
cd "C:\Sistema JMS"
start JMS.exe
exit
Salve o arquivo, obviamente você deve fazer as adaptações necessárias para atualizar, como por exemplo mudar o diretório(C:\Sistema JMS) e o nome do executável(JMS.exe) desejado.
Vamos criar um formulário e salvar o mesmo como uFrmAtualizarFTP, agora iremos renomear o nome do formulário para FrmAtualizarFTP.
No uFrmAtualizarFTP, vamos adicionar agora :
- IdFTP1: TIdFTP;
- Panel1: TPanel;
- SpeedButton1: TSpeedButton;
- Panel2: TPanel;
- Gauge1: TGauge;
Seu formulário ficará mais ou menos assim :
type
TFrmAtualizarFTP = class(TForm)
IdFTP1: TIdFTP;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
Panel2: TPanel;
Gauge1: TGauge;
private
{ Private declarations }
xTamanhoArquivo : Integer;
public
{ Public declarations }
end;
Neste momento vamos configurar o componente IdFTP1, no evento onCreate do Formulário vamos implementar o seguinte :
procedure TFrmAtualizarFTP.FormCreate(Sender: TObject);
begin
IdFTP1.AutoLogin := True;
IdFTP1.Host := 'ftp.empresa.com.br';
Vamos agora implementar dois eventos no componente IdFTP1, selecione o mesmo e localize o evento onWork, implemente o seguinte neste evento :
procedure TFrmAtualizarFTP.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
begin
Gauge1.Progress := AWorkCount;
Application.ProcessMessages;
end;
Agora com o IdFTP1 ainda selecionado vamos localizar o evento onWorkBegin e nele vamos implementar o seguinte:
procedure TFrmAtualizarFTP.IdFTP1WorkBegin(ASender: TObject;
AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
Gauge1.Progress := 0;
if AWorkCountMax > 0 then
Gauge1.MaxValue := AWorkCountMax
else
Gauge1.MaxValue := xTamanhoArquivo;
Application.ProcessMessages;
end;
procedure TFrmAtualizarFTP.SpeedButton1Click(Sender: TObject);
begin
Try
Try
IdFTP1.Connect;
xTamanhoArquivo := IdFTP1.Size('public_html/JMS.exe');
IdFTP1.Get('public_html/JMS.exe', 'C:\JMS.exe',True, False);
WinExec('AtualizarExe.bat',SW_NORMAL);
Application.Terminate;
Finally
IdFTP1.Disconnect;
end;
Except
on E : exception do
begin
raise Exception.Create('Erro ao conectar FTP' + #13 +
'Mensagem : ' + E.Message + #13 +
'Classe ' + E.ClassName );
end;
end;
end;
Com isso poderemos, colocar o exe dentro de um FTP particular e dizer qual é o caminho que ele se encontra no meu caso estou usando 'public_html/JMS.exe', faça aqui também suas adaptações.
Fico por aqui ate à próxima Quick Tips. Baixe o exemplo completo neste post.
Um abraço.