/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Automatisk opdatering...
Fra : Michael Vilhelmsen


Dato : 06-06-05 13:41

Hej

Jeg har lavet en program pakke som består af mindst 5 programmer.
I den forbindelse, kunne jeg godt tænke mig, at mit program havde en funktion, som kunne se om der på en given server fandtes en opdaterings fil til mit program (programmer).

Det skal ikke være en automatisk opdatering, men noget som brugeren vælger at undersøge selv.

Jeg havde tænkt mig noget i stil med, at programmet undersøgte om der var en given fil på en given adresse, og hvis den var nyere end den der fandtes hentede den ned, og pakkede den ud (havde tænkt
mig, at mine programmer skulle f.eks. ZIP pakkes).

Findes der nogen nem måde at gøre det på ?

Michael

PS.
Bruger D5 Ent.

--

Best Regards / Venlig hilsen
Michael Vilhelmsen
==========
Best Regards / Venlig hilsen

Michael Vilhelmsen


 
 
Harald (06-06-2005)
Kommentar
Fra : Harald


Dato : 06-06-05 14:47

"Michael Vilhelmsen"
<Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en
meddelelse news:mn.33707d569f7cb086.11460@Microcom.PLEASEREMOVE.Dk...
> Hej
>
> Jeg har lavet en program pakke som består af mindst 5 programmer.
> I den forbindelse, kunne jeg godt tænke mig, at mit program havde en
> funktion, som kunne se om der på en given server fandtes en opdaterings
> fil til mit program (programmer).
>
> Det skal ikke være en automatisk opdatering, men noget som brugeren vælger
> at undersøge selv.
>
> Jeg havde tænkt mig noget i stil med, at programmet undersøgte om der var
> en given fil på en given adresse, og hvis den var nyere end den der
> fandtes hentede den ned, og pakkede den ud (havde tænkt mig, at mine
> programmer skulle f.eks. ZIP pakkes).
>
> Findes der nogen nem måde at gøre det på ?

Jeg har lavet denne klasse som jeg bruge i et par programmer. Den checker
dog ikke en dato/tid men et versions nummer i filen, men det skulle da være
til at lave om.

/HK

--------------

unit HKUpdateCheck;

interface

uses Classes, ExtCtrls, IdHTTP;

type
TOnNewUpdate = procedure(NewVersion : string) of object;

THKUpdateCheck = class
private
FOnNewUpdate : TOnNewUpdate;
FCurrentVersion : string;
FHttp : string;
CheckTimer : TTimer;
FEnabled : boolean;

procedure CheckTimerGo(Sender: TObject);
procedure UpdateCheckThreadDone(Sender: TObject);
procedure SetEnabled(Value: Boolean);
public
property Enabled: Boolean read FEnabled write SetEnabled default false;
constructor Create(Http, CurrentVersion : string; OnNewUpdate :
TOnNewUpdate);
destructor Destroy; override;
end;

implementation

type
TUpdateCheckThread = class(TThread)
private
{ Private declarations }
FHttp : string;
IdHTTP : TIdHTTP;
protected
procedure Execute; override;

public
Version : string;
constructor Create(Http : string);
// destructor Destroy; override;
end;

//
**************************************************************************************************
{ TUpdateCheckThread }

constructor TUpdateCheckThread.Create(Http : string);
begin
inherited Create(False);
FHttp:=Http;
FreeOnTerminate:=true;
Version:='Error';
end;

procedure TUpdateCheckThread.Execute;
begin
try
IdHTTP:=TIdHTTP.Create(nil);
IdHTTP.ReadTimeout:=15000;
IdHTTP.AllowCookies:=false;
Version:=IdHTTP.Get(FHttp);
finally
IdHTTP.Free;
end;
end;

//
**************************************************************************************************
{ THKUpdateCheck }

procedure THKUpdateCheck.UpdateCheckThreadDone(Sender: TObject);
var
Version : string;
begin
Version:=(Sender as TUpdateCheckThread).Version;

if Version<>'Error' then
begin
if pos('=',Version)>0 then
Version:=copy(Version,pos('=',Version)+1,MaxInt);
if Version<>FCurrentVersion then
FOnNewUpdate(Version);
end;

if Version='Error' then
CheckTimer.Interval:=3600000 // 1 hour
else
CheckTimer.Interval:=86400000; // 24 hours
CheckTimer.Enabled:=true;
end;

procedure THKUpdateCheck.CheckTimerGo(Sender: TObject);
begin
CheckTimer.Enabled:=false;
TUpdateCheckThread.Create(FHttp).OnTerminate:=UpdateCheckThreadDone;
end;

constructor THKUpdateCheck.Create(Http, CurrentVersion : string; OnNewUpdate
: TOnNewUpdate);
begin
inherited create;

FHttp:=Http;
FOnNewUpdate:=OnNewUpdate;
FCurrentVersion:=CurrentVersion;
CheckTimer:=TTimer.Create(nil);
CheckTimer.Enabled:=false;
CheckTimer.OnTimer:=CheckTimerGo;
end;

destructor THKUpdateCheck.Destroy;
begin
CheckTimer.Free;
inherited;
end;

procedure THKUpdateCheck.SetEnabled(Value: Boolean);
begin
if Value<>FEnabled then
begin
FEnabled:=Value;
if FEnabled then
begin
CheckTimer.Interval:=10000; // first check after 10 sec.
CheckTimer.Enabled:=true;
end
else
CheckTimer.Enabled:=false;
end;
end;

end.



Kurt Bilde (08-06-2005)
Kommentar
Fra : Kurt Bilde


Dato : 08-06-05 11:54

Harald wrote:
> Jeg har lavet denne klasse som jeg bruge i et par programmer. Den checker
> dog ikke en dato/tid men et versions nummer i filen, men det skulle da være
> til at lave om.

Ud over Haralds udmærkede kode kan du også kigge på TMS Software, som
har lavet et updatekomponent (TWebupdate):

http://www.tmssoftware.com/WUPDATE.ZIP

http://www.tmssoftware.com/ kan du læse mere om det, ved i venstre
side at findes TWebUpdate i listen.

Når du er nået til Opdatering, bliver det næste naturlige behov muligvis
patch. Du kan evt. kigge på MakeUpdate (som er skrevet i Delphi) her:
http://www.tsppd.com/MakeUpdate/

-Kurt



Michael Vilhelmsen (09-06-2005)
Kommentar
Fra : Michael Vilhelmsen


Dato : 09-06-05 07:26

Jeg takker alle....

Michael

--

Best Regards / Venlig hilsen
Michael Vilhelmsen
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com


Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409075
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste