Autor |
Beitrag |
omexlu
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 29.12.10 01:28
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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mi 29.12.10 01:34
vielleicht suchst Du sowas
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; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
qr123de
Hält's aus hier
Beiträge: 1
|
Verfasst: Mi 29.12.10 01:40
TDownloadAction geht viel besser, als soviel Code.
Einen ähnlichen Beitrag gibt es gerade in der DP (crosspost):
www.delphipraxis.net...n-ueberpruefung.html
|
|
omexlu 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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.
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.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
omexlu 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 29.12.10 02:58
Diese Codes sind aber um etwas zu downloaden oder ?
Nicht um Version zu prüfen?
Danke
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
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:
www.delphi-forum.de/viewtopic.php?t=94339
|
|
omexlu 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 29.12.10 22:55
Wie wäre es, wenn du dir die Antworten einmal anschauen würdest...
Da wurden bereits Möglichkeiten wie diese genannt:
www.delphi-forum.de/....php?p=627983#627983
|
|
omexlu 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 29.12.10 23:16
Sry ich blick da nur nicht durch....
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|