Entwickler-Ecke
Internet / Netzwerk - Version Überprüfung
omexlu - Mi 29.12.10 01:28
Titel: Version Überprüfung
Hallo ,
Ich bin blutiger Anfänger in sachen DELPHI jedoch hab ich die letzten Tage an meinem ersten Programm gesessen und schon etwas hinbekommen.
Nun wollte ich dass wenn mann das Programm aufruft das programm checkt ob es update dazu gibt.
hatte jetzt die möglichkeit probiert dass mann im Programm eine const eingibbt mit der version.
Mit idhttp hab ich dann geprüft ob die version <> mit der version ist die im web ist (einfach ne version.txt) auf web hochgeladen.
Aber irgendwie ist das ganze irgendwie bissl buggy und funktioniert nicht immer wie es soll.
Weiss jemand was mann da noch machen könnte?
Es soll nur prüfen ob eine neue Version verfügbar ist und ein showmessage anzeigen.
Bitte um Rat
Danke
bummi - Mi 29.12.10 01:34
vielleicht suchst Du sowas
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| implementation uses WinInet;
{$R *.dfm}
function GetInetURLAsString(const fileURL: string): string; const C_BufferSize = 4096; var AUrl: string; hSession, hURL: HInternet; Buffer: array[0..C_BufferSize] of Byte; BufferLen: DWORD; strHeader: String; strPageContent: TStringStream; begin Result := ''; if pos('http://',lowercase(fileURL))=0 then AUrl:='http://'+fileURL else AUrl := fileURL; hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try strHeader := 'Accept-Charset: utf-8'#13#10; hURL := InternetOpenURL(hSession, PChar(AUrl), PChar(strHeader), Length(strHeader), 0, 0); try strPageContent := TStringStream.Create('', TEncoding.Default); try BufferLen := 1; while BufferLen>0 do begin if InternetReadFile(hURL, @Buffer[0], SizeOf(Buffer), BufferLen) then if BufferLen > 0 then strPageContent.WriteBuffer(Buffer[0], BufferLen) end; Result := strPageContent.DataString; finally strPageContent.Free; end; finally InternetCloseHandle(hURL); end finally InternetCloseHandle(hSession); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Text := GetInetURLAsString('www.google.de'); end; |
omexlu - Mi 29.12.10 01:43
Hallo ,
Danke bummmi für dein Code aber irgendwie kann ich da nicht rauslesen was genau der macht und so ?
Sry bin erst 2 Tage bei Delphi dabei
Was genau macht der code und wie geh ich am besten damit um ?
Danke
bummi - Mi 29.12.10 02:34
@qr123de
wir verwenden DownLoadURL auch, allerdings will man gegf. nicht dem Umweg über eine Datei gehen, zudem gab es IMHO dort ein Problem mit offen bleibenden Ports.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| implementation uses ExtActns; {$R *.dfm} Function GetTempDir:String; var p:Pchar; begin p:=stralloc(255); GetTempPath(255,p); Result:=p; strdispose(p); end;
Function MakeSaveURL(const AURL:String):String; begin if Pos('http',LowerCase(AURL))=0 then Result := 'http://' +AURL else Result := AURL; end;
function DownloadURLToFile(const AURL, AFileName : TFileName) : boolean; begin Result:=True;
with TDownLoadURL.Create(nil) do try URL := MakeSaveURL(AURL); Filename := AFileName; try ExecuteTarget(nil); except Result:=False; end; finally Free; end; end; |
@omexlu
Du kannst De genanten Funktionen z.B. in eine tools.pas packen
oberhalb von Implemetation fügst die die Prozedur/Fuktionsrümpfe ein.
Die Tools.pas nimmst Du in die uses Deines Programmes auf.
Der Teil
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Text := GetInetURLAsString('www.google.de'); end; |
wäre jetzt ein Beispiel für die Verwendung meiner Routine. Du würdest die URL Deiner Textdatei im Web eingeben, den Inhalt in einen String oder eine Stringlist packen und auswerten ob in der Datei Informationen enthalten sind die ein Update erforderlich machen.
omexlu - Mi 29.12.10 02:58
Diese Codes sind aber um etwas zu downloaden oder ?
Nicht um Version zu prüfen?
Danke
elundril - Mi 29.12.10 04:20
Zum version überprüfen musst du ja auch mal was runterladen oder? Und zwar die neuste versionsnummer. Sonst weiß dein programm ja nicht obs ne neue version gibt oder nicht.
Wobei ich dir raten würde hier im forum nach einem updater zu suchen.
jaenicke hat da einen sehr guten geschrieben, den sjupdater wenn ich mich nicht irre.
Lg elundril
jaenicke - Mi 29.12.10 06:40
elundril hat folgendes geschrieben : |
jaenicke hat da einen sehr guten geschrieben, den sjupdater wenn ich mich nicht irre. |
Danke für die Blumen, aber ganz so gut ist er noch nicht. :mrgreen:
Bei versionsspezifischen Updates einzelner Dateien ist noch ein Bug drin und ich bin noch nicht dazu gekommen die Echtheit der Updates durch ein Zertifikat zu validieren (wenn das denn gewünscht ist).
Dafür integriert er sich komplett in die Programm-Exe und kommt auch mit der UAC klar.
Zu finden ist er hier:
http://www.delphi-forum.de/viewtopic.php?t=94339
omexlu - Mi 29.12.10 22:38
Gibt es einen Code mit dem mann eine Datei aus dem Programm heraus herunterladen kann
Delphi-Quelltext
1:
| shellexecute(application.handle,'open',pchar('http://****/exe/***.exe'),nil,nil,sw_shownormal); |
ist nicht so schön ?
Danke
Moderiert von
Narses: Delphi-Tags hinzugefügt
omexlu - Mi 29.12.10 23:16
Sry ich blick da nur nicht durch....
jaenicke - Do 30.12.10 05:36
Was genau verstehst du denn nicht? Wenn du nicht nachfragst, wenn du etwas nicht verstehst und auch nichts dazu findest, kann dir auch niemand dabei helfen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!