|
| 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
På 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
| |
|
|