Olá, estou desenvolvendo um projeto de auto update com múltiplos downloads.
Porém quando está fazendo o download dos arquivos, o programa simplesmente trava e só é possível mexer após todos os downloads.
Já coloquei anti freeze, porém o problema continua.
Segue o código, caso alguém possa alterar e me mandar ficarei agradecido, acredito que o problema esteja no Timer1.
unit CLIENTE;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, sSkinManager, ExtCtrls, sPanel, StdCtrls, Buttons, sBitBtn,
sButton, acNoteBook, sSpinEdit, sGauge, ComCtrls, sTreeView, sTrackBar,
sPageControl, sTabControl, Mask, sMaskEdit, sSpeedButton, sGroupBox,
sComboBox, sListBox, sRadioButton, sCheckBox, sMemo, sEdit, acShellCtrls,
sLabel, OleCtrls, SHDocVw, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, acProgressBar, DFUnRar, IdAntiFreezeBase,
IdAntiFreeze;
type
TForm1 = class(TForm)
sSkinManager1: TsSkinManager;
sPanel1: TsPanel;
sLabelFX1: TsLabelFX;
sButton3: TsButton;
sPanel2: TsPanel;
web: TWebBrowser;
Timer1: TTimer;
IdHTTP1: TIdHTTP;
lista: TMemo;
Memo2: TMemo;
Memo3: TMemo;
sProgressBar1: TsProgressBar;
sProgressBar2: TsProgressBar;
DFUnRar1: TDFUnRar;
Edit1: TEdit;
Timer2: TTimer;
IdAntiFreeze1: TIdAntiFreeze;
sBitBtn1: TsBitBtn;
sBitBtn2: TsBitBtn;
sBitBtn3: TsBitBtn;
procedure FormCreate(Sender: TObject);
procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure sButton3Click(Sender: TObject);
private
IsExtracting: boolean;
Abort: boolean;
Success: boolean;
public
ltitle : string;
Min: Integer;
path : string;
pexit: boolean;
function UpdateExe():boolean;
{ Public declarations }
end;
var
Form1: TForm1;
sNomeLocalVar:string;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
sButton3.Enabled := False;
web.Navigate('http://www.somubom.net/muspirit/launcher/');
ltitle := 'Launcher';
// Editar /\
sSkinManager1.Active:= true;
if FindWindow(Nil, PChar(ltitle)) > 0 then
begin
MessageDlg('O launcher ja esta em execucao.', mtInformation, [mbOK], 0);
Application.Terminate;
form1.Close;
end
else
Application.Title:=ltitle;
end;
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
sProgressBar1.Position := AWorkCount;
end;
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
sProgressBar1.Position := 0;
sProgressBar1.Max := AWorkCountMax;
sLabelFX1.caption := 'Verificando atualizações...'
end;
procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
sProgressBar1.Position := sProgressBar1.Max;
sLabelFX1.caption := 'Atualização concluída!';
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
arquivo,caminho : string;
slTemp : TStringList;
i : integer;
MyFile: TFileStream;
begin
Timer1.Enabled:= False;
caminho:= 'http://127.0.0.1:8090/';
arquivo:= 'versaoatual.txt';
MyFile := TFileStream.Create('versaoatual.txt', fmCreate);
try
IdHTTP1.Get('http://127.0.0.1:8090/versaoatual.txt', MyFile);
finally
MyFile.Free;
Memo2.Lines.LoadFromFile('versaoatual.txt');
Memo3.Lines.LoadFromFile('versao.txt');
if Memo2.Lines[0] = Memo3.Lines[0] then
begin
sButton3.enabled := True;
sLabelFX1.Caption := 'Atualização concluída!';
sLabelFX1.Top := 35;
sProgressBar1.Visible:=False;
sProgressBar2.Visible:=False ;
end else begin
slTemp := TStringList.Create;
slTemp.LoadFromFile('update.txt');
for i := 0 to slTemp.Count - 1 do
begin
sLabelFX1.Caption := 'Baixando: ' + slTemp.Strings[i];
caminho:='http://127.0.0.1:8090/';
arquivo:= slTemp.Strings[i];
MyFile := TFileStream.Create(slTemp.Strings[i], fmCreate);
try
IdHTTP1.Get('http://127.0.0.1:8090/' + slTemp.Strings[i], MyFile);
finally
FreeAndNil(MyFile);
end;
end;
timer2.enabled := True;
memo2.lines.savetofile('versao.txt');
sLabelFX1.Caption := 'Atualização concluída';
end;
end;
end;
function TForm1.UpdateExe():boolean;
begin
Success := false;
// proteger a executavel
if FileExists('Launcher.new') then
begin
form1.Hide;
Repeat //o truque cria-se um laço até o
if RenameFile('Launcher.exe','Launcher.old') then //tenta renomear o exe
begin
//RenameFile('Launcher.new','Launcher.exe'); //renomeia o novo como exe
// fim extração
if FileExists('Launcher.new') then
begin
RenameFile('Launcher.new', 'Launcher.exe');
Success:=true;
end
else
begin
RenameFile('Launcher.old', 'Launcher.exe');
Success:=true;
end;
Min:=0; //Se não for possível renomear é porque o aplicativo
sleep(2000);
if Success = false then //não terminou por completo, espero 2 segundos e
Min:=Min+1
else
Min := 10;
end //tento de novo. Espero até 20 segundos (contador)
until Min=10;
end;
if FileExists('Launcher.old') then
windows.DeleteFile(pchar(path+'Launcher.old'));
Result := Success;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
with Edit1 do
if Text <> '' then DFUnRar1.Directory:=Text;
DFUnRar1.FileName := Lista.Lines[0];
if not FileExists(DFUnRar1.FileName) then begin
Exit;
end else begin
IsExtracting := True;
DFUnRar1.Extract;
IsExtracting := False;
if not Abort then
end;
Timer2.Enabled := False;
end;
procedure TForm1.sButton3Click(Sender: TObject);
begin
winexec('main.exe connect /u127.0.0.1 /p44405', sw_normal);
Application.Terminate;
end;
end.