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 = 1024;
  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, nilnil0);
  try
    strHeader := 'Accept-Charset: utf-8'#13#10;
    hURL := InternetOpenURL(hSession, PChar(AUrl), PChar(strHeader), Length(strHeader), 00);
    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;


qr123de - Mi 29.12.10 01:40

TDownloadAction geht viel besser, als soviel Code.

Einen ähnlichen Beitrag gibt es gerade in der DP (crosspost):
http://www.delphipraxis.net/157087-version-ueberpruefung.html


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(nildo
  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.user profile iconjaenicke hat da einen sehr guten geschrieben, den sjupdater wenn ich mich nicht irre.

Lg elundril


jaenicke - Mi 29.12.10 06:40

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke 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 user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - Mi 29.12.10 22:55

Wie wäre es, wenn du dir die Antworten einmal anschauen würdest... :roll:

Da wurden bereits Möglichkeiten wie diese genannt:
http://www.delphi-forum.de/viewtopic.php?p=627983#627983


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.