procedure TFOnlUpdate.CheckUpdateClick(Sender: TObject);
const updateURL = '
http://www.the-microborgs.de/download/update.xml';
int_name = '
OwnPrgName';
prg_ID = 1;
var Programme : IXMLDOMNodeList;
updatepossible : IXMLDOMNodeList;
tmpfile :
string;
Pos : Integer;
i,j : Integer;
RunUpdate : Boolean;
tmpexefile :
string;
reg : TRegistry;
f :
File;
begin
Label2.Caption := '
MyApp führt die gelisteten Aufgaben aus...';
Panel1.Refresh;
RunUpdate := false;
with CheckVersionCheck
do
begin
glyph := igRound;
Checked := true;
refresh;
Glyph := igCheck;
caption := '
Laufende Version Gefunden : v' + inttostr(Version.Hauptversion) + '
.' + inttostr(Version.Nebenversion) + '
(Build '+ inttostr(Version.build) + '
)';
Refresh;
sleep(20);
end;
with ConnServerCheck
do
begin
glyph := igRound;
Checked := true;
Refresh;
sleep(20);
end;
tmpfile := '
C:\updatetemp.xml';
// Man kann auch jeden anderen Pfad benutzen das ist egal.
if GetInetFile(updateURL, tmpfile,
NIL)
then
begin
with ConnServerCheck
do
begin
Glyph := igCheck;
Caption := '
Verbindung zum Server Hergestellt';
refresh;
end;
with CheckUpdatesExists
do
begin
Glyph := igRound;
Checked := true;
refresh;
end;
xmlUpdateDoc := CoDOMDocument.Create;
xmlUpdateDoc.load(tmpfile);
if (xmlUpdateDoc <>
nil)
then
begin
Programme := xmlUpdateDoc.selectNodes('
/programme/programm');
if Programme.length > 0
then
begin
// Checken ob überhaupt einträge in der XML-Datei sind
for I := 0
to Programme.Length - 1
do
begin
// Den internen Namen die ID und die Build version checken
if (Programme.item[i].selectSingleNode('
int-name').text = int_Name)
and
(strtoint(Programme.item[i].selectSingleNode('
id').text) = prg_ID)
and
(strtoint(Programme.item[i].selectSingleNode('
build').text) > Version.Build)
then
begin
updatepossible := Programme.item[i].selectNodes('
updatepossible/build');
// Checken mit welchem Laufenden build man das Update runterladen darf
for J := 0
to updatePossible.Length - 1
do
begin
if (updatepossible.item[j].nodeName = '
build')
and (UpdatePossible.item[j].text = inttostr(Version.Build))
then
begin
with CheckUpdatesExists
do
begin
Glyph := igCheck;
Caption := '
Neue Version Gefunden : v' +
Programme.item[i].selectSingleNode('
version').text + '
(Build ' +
Programme.item[i].selectSingleNode('
build').text + '
)';
refresh;
end;
RunUpdate := true;
// Dateiname der heruntergeladen werden muss auslesen
UpdateFileDownload := Programme.item[i].selectSingleNode('
file').text;
end else if not RunUpdate
then
begin
if (j = (UpdatePossible.Length-1))
then
with CheckUpdatesExists
do
begin
Glyph := igCross;
Caption := '
Es existieren keine Upates für die Version : v' + inttostr(Version.Hauptversion) + '
.' + inttostr(Version.Nebenversion) + '
(Build '+ inttostr(Version.build) + '
)';
refresh;
end;
end;
end;
end else if not RunUpdate
then
with CheckUpdatesExists
do
begin
Glyph := igCross;
Caption := '
Es existieren keine Upates für die Version : v' + inttostr(Version.Hauptversion) + '
.' + inttostr(Version.Nebenversion) + '
(Build '+ inttostr(Version.build) + '
)';
refresh;
end;
end;
end;
end;
// Update Procedure an sich ! Herunterladen und starten ! :)
if RunUpdate
then
begin
tmpexefile := '
C:\Programme\MyApp\update.exe';
DownloadUpdates.Visible := true;
DownloadUpdates.Glyph := igRound;
DownloadUpdates.Caption := '
Download von update.exe...';
DownloadUpdates.Checked := true;
Panel4.Refresh;
if GetInetFile(UpdateFileDownload, tmpexefile, ProgressBar1)
then
begin
DownloadUpdates.Glyph := igCheck;
DownloadUpdates.Caption := '
Download von update.exe...Abgeschlossen';
Panel4.Refresh;
tmpfile := '
C:\updatetemp.xml';
if FileExists(tmpfile)
then
begin
assignFile(f, tmpFile);
erase(f);
end;
UpdateRun := TFileRun.Create(self);
UpdateRun.Browse := false;
UpdateRun.FileName := tmpexefile;
UpdateRun.Execute;
end;
end;
end else
ShowMessage('
Fehler beim Versuch nach updates zu schauen !!');
end;