Versionsabfrage über's Internet mittels Thread
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
SittingDuck hat hier mithilfe einiger Mitglieder einen Code zusammengestellt, der es ermöglicht, über einen Thread, eine Datei, die sich auf einem Server befindet, auszulesen. Befindet sich in dieser Datei die Versionsnummer der aktuellsten Version einer Anwendung, kann man damit eine Update Überprüfung durchführen. Ein Thread ist dafür natürlich das beste, da die Anwendung während der Überprüfung nicht einfriert, sei die Verbindung noch so langsam. Unit für die Verwendung von Internetfunktionen einbinden:
Delphi-Quellcode:
Das Thread Objekt:
uses WinInet;
Delphi-Quellcode:
Funktion, die die Datei auf dem Server ausliest:
type
TGetRemoteVersionThread = class(TThread) private procedure UpdateCaption; protected procedure Execute; override; public CurrentVersionStr, RemoteVersion: string; //FileVersion, RemoteVersion end;
Delphi-Quellcode:
Funktion zum Anzeigen der Versionen und des Status (neuere Version vorhanden):
function LoadURL(URL: String): String;
var IOpen, IURL: HINTERNET; Read: Cardinal; Msg: array[0..4096] of Char; begin Result := ''; IOpen := InternetOpen('GetIP', INTERNET_OPEN_TYPE_PRECONFIG, '', '', INTERNET_FLAG_NEED_FILE); if IOpen <> nil then try IURL := InternetOpenUrl(IOpen, PAnsiChar(URL), nil, 0, INTERNET_FLAG_NO_UI or INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD, 0); if IURL <> nil then try repeat FillChar(Msg, SizeOf(Msg), 0); if InternetReadFile(IURL, @Msg[0], Pred(SizeOf(Msg)), Read) then Result := Result + Msg else Break; until Read = 0; finally InternetCloseHandle(IURL); end; finally InternetCloseHandle(IOpen); end; end;
Delphi-Quellcode:
Prozedur "Execute" des Threads:
procedure TGetRemoteVersionThread.UpdateCaption;
begin with Form1 do begin // Could not get data if RemoteVersion = '' then begin LblVersionStatus.Caption := 'An error occured.' + #13#10 + 'Note: ' + 'You must be connected to the internet'; end else if RemoteVersion = CurrentVersionStr then LblVersionStatus.Caption := 'You have the newest version installed' else LblVersionStatus.Caption := 'A newer version is available.'; LblCurrentVer.Caption := CurrentVersionStr; LblOnlineVer.Caption := RemoteVersion; end; end;
Delphi-Quellcode:
Das Starten des Threads geht's folgendermaßen:
procedure TGetRemoteVersionThread.Execute;
const BaseURL = 'http://www.domain.de/'; VersionFile = 'version.txt'; begin try if InternetGetConnectedState(nil, 0) then begin RemoteVersion := LoadURL(BaseURL + VersionFile); // get current version CurrentVersionStr := GetVersion; Synchronize(UpdateCaption); end; except end; end;
Delphi-Quellcode:
Damit es eswas anschaulicher ist, habe ich dazu eine kleine Demo geschrieben, die sich im Anhang befindet.
var
Thread: TGetRemoteVersionThread; // ... Thread := TGetRemoteVersionThread.Create(True); Thread.FreeOnTerminate := True; Thread.Resume; |
Re: Versionsabfrage über's Internet mittels Thread
Und weil ich auch noch meinen Senf dazugeben will... Meine TInternetUpdate Komponente macht ziemlich genau das Gleiche, nur bereits praktisch in eine VCL Komponente gepackt...
Kuckst Du hier |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz