Entwickler-Ecke
Internet / Netzwerk - [TidHTTP] Ungewöhnlicher Fehler bei Get();
Born-to-Frag - So 16.04.06 12:51
Titel: [TidHTTP] Ungewöhnlicher Fehler bei Get();
Hallo!
Ich lese auf einer Seite die neuste Version meines Programms aus (x.x.x) und vergleiche sie dann mit der momentanen Version.
Mit ist vor kurzem das erste mal aufgefallen, dass es bei jemandem hieß das er die neuste Version hat, obwohl es sie aber nicht war!
Ich lese die neuste Version in eine lokale Variable und drin steht die falsche (aktuelle) Version (warscheinlich weil schon mal nach Updates überprüft worden ist und in der zwischenzeit die Version geändert wurde). Also muss das noch in irgendeinem Zwischenspeicher hängen.. :nixweiss:
greetz
matze - So 16.04.06 14:07
Zeig doch bitte mal deinen Code mit dem du das machst. Sonst kann man hier nur raten und dir nicht helfen !
Born-to-Frag - So 16.04.06 14:12
Deswegen hab ich ja den Link gepostet :D (Oder hast du ihn übersehn?)
Hier ist er also noch mal:
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:
| uses WinInet;
procedure DeleteIECache; var lpEntryInfo: PInternetCacheEntryInfo; hCacheDir: LongWord; dwEntrySize: LongWord; begin dwEntrySize := 0; FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize); GetMem(lpEntryInfo, dwEntrySize); if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize); if hCacheDir <> 0 then begin repeat DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName); FreeMem(lpEntryInfo, dwEntrySize); dwEntrySize := 0; FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize); GetMem(lpEntryInfo, dwEntrySize); if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize); end; FreeMem(lpEntryInfo, dwEntrySize); FindCloseUrlCache(hCacheDir); end; |
matze - So 16.04.06 14:53
nein den Quelltext mein ich nicht. Ich meine den, mit dem du die Verisonnummer ausliest.
Born-to-Frag - So 16.04.06 14:57
Achsooo :oops: ^^
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| NewVersion := IdHttp1.Get(VersionURL); if (NewVersion <> CurrentVersion) and (NewVersion <> '') then begin ... MessageBox(Hanlde, 'Update vorhanden!', 'Information', MB_OK or MB_ICONINFORMATION); end; |
greetz
matze - So 16.04.06 16:42
Also als erstes würde ich mal einen try..except Block darum bauen.
Dann würde ich mir mal alle Werte anzeigen lassen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| try NewVersion := IdHttp1.Get(VersionURL); showmessage ('Version vom Server: ' + NewVersion + #13'Lkale Version: ' + CurrentVersion); if (NewVersion <> CurrentVersion) and (NewVersion <> '') then begin ... MessageBox(Hanlde, 'Update vorhanden!', 'Information', MB_OK or MB_ICONINFORMATION); end; except showmessage ('Fehler bei der HTTP Verbindung'); end; |
Schau mal, was da rauskommt, evtl hilft dir das schon weiter.
Born-to-Frag - So 16.04.06 16:47
Hallo!
try .. except-Block hab ich alles drum, Exceptions treten keine auf, Version lasse ich mir auch anzeigen und NewVersion ist (nicht bei mir sondern bei manchen die versuchen zu updaten) = CurrentVersion.
Anscheinend tritt der Fehler nur auf, wenn schon mal vorher nach Updates geprüft wurde und dort die Version wirklich = der NewVersion war.
Also ist noch irgendwas im Cache, aber ich kann doch nicht den ganzen Cache löschen lassen :gruebel:
greetz
alias5000 - So 16.04.06 17:07
Auf
http://www.euromind.com/iedelphi/ gibts da ne Komponente oder so, die sich mit dem IE Cache beschäftigt (einzelne Einträge und so). Etwas gewöhnungsbedürftig, aber es sollte gehen.
Da der Autor der Seite nix mehr macht, haben das andere weiterentwickelt und weitere Demos zu der ganzen Geschichte geschrieben. Such einfach mal auf
http://www.torry.net nach EmbeddedWB, dort sollte was aktuelles kommen. Dort ist auch die Komponente mit dabei.
Gruß alias5000
matze - So 16.04.06 17:43
tja das ist nur alles nutzlos.
Denn die INDY kompos nehmen keinen Cache her und schon gar nicht den IE Cache. Der Fehler muss woanders liegen.
Evtl. sinds irgendwo davorgestellte Leerzeichen ? Die kannst du mittels TRIMentfernen.
Born-to-Frag - So 16.04.06 18:10
Nein, darauf achte ich schon, das was im Textfile steht ist garantiert richtig..
EDIT: Also irgendetwas muss im Cache oder wo auch immer sein weil manchmal ist auch das Update da drinne wenn es z.B. 2 gab :roll: (Download ist sofort fertig und Version ändert sich nicht)
greetz
matze - Mo 17.04.06 09:12
das kann aber im prinzip nicht sein, da es bei den Indys definitv keinen Cache gibt. Also entweder liegt das an dem Server bei dem du die Datei lädst. oder es liegt an deiner Programmierung. Ich vermute mal, dass du eine HTTP Komponente auf deinem Fprmular hast, die für mehrer Anfragen zuständig ist. Mach doch mal eine alleine nur für die Update anfrage.
GTA-Place - Mo 17.04.06 10:59
Du änderst nach einem Update aber schon CurrentVersion?
Born-to-Frag - Mo 17.04.06 14:20
Hallo!
matze hat folgendes geschrieben: |
| Also entweder liegt das an dem Server bei dem du die Datei lädst. |
Nein, bei anderen leuten funktioniert es zur gleichen Zeit auch :(
matze hat folgendes geschrieben: |
| Ich vermute mal, dass du eine HTTP Komponente auf deinem Fprmular hast, die für mehrer Anfragen zuständig ist. |
Die Komponente ist nur für das Update zuständig..
GTA-Place hat folgendes geschrieben: |
| Du änderst nach einem Update aber schon CurrentVersion? |
Na das ist mir auch klar, aber bei manchen die schonmal ein Update gemacht haben, geht der Download rasend schnell obwohl sie nicht unbedingt DSL haben und das bei ~600KB .. Und was gedownloaded wird ist ne alte Version, auf dem Server liegt aber keine ältere Version mehr :cry:
An der Programmierung liegt es denke ich auch nicht ;)
greetz
matze - Mo 17.04.06 16:58
evtl zeigst du mal ein bisschen mehr von deinem code ? oder lädst mal das ganze Projekt hoch ?
Born-to-Frag - Sa 22.04.06 02:10
Hi!
Also ich hab das jetzt etwas länger getestet..
URLDownloadToFile verwendet anscheinend den Cache (Konnte ich bei nem Kumpel jetzt testen) den ich mit der oben geposteten Prozedur leeren kann. Bringt mir aber nichts, da ich das ja nicht benutze.
Das mir die Indys etwas falsches ausgeben, könnte vielleicht daran liegen, dass keine Administratorrechte vorhanden sind!? Ich bin mir noch nicht ganz sicher und muss mir das auch noch mal näher ansehen..
Das ist alles, wo ich die Variable NewVersion ändere (sie ist lokal), also kann da doch eigendlich nichts schief gehen!?
Delphi-Quelltext
1: 2:
| NewVersion := Form1.IdHttp1.Get(URL); |
greetz
Sy- - Mo 24.04.06 12:46
Aaalso!
Versuchs mal mit deine.txt?time=3482348965
der wert muss sich dann immer variieren, so umgehst du den cache ganz easy.
Gruß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!