Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem beim webupdate (https://www.delphipraxis.net/1548-problem-beim-webupdate.html)

CalganX 7. Dez 2002 20:08


Problem beim webupdate
 
Hi,
ich habe gerade angefangen eine Prozedur für ein Webupdate zu schreiben. Alles läuft, allerdings lädt er nicht die Dateien runter, obwohl sie vorhanden und im richtigen Verzeichnis liegen...
Folgender Source:

Delphi-Quellcode:
procedure TForm1.lookForUpdate1Click(Sender: TObject);
var
  updateFile: TIniFile;
  aktVer, newVer: String;
  VersionFile: TextFile;
  FileCount: integer;
  FileList: TStringlist;
  offFileList: TStringList;
  i: integer;
  MainFile: String;
begin
  if FileExists(ExtractFilePath(Application.ExeName)+'update\updateload.inf') then
    DeleteFile(ExtractFilePath(Application.ExeName)+'update\updateload.inf');
  try
    URLDownloadToFile(nil, 'http://www.chris-harms.de/sites/projects/updates/CodeLib.inf', PChar(ExtractFilePath(Application.ExeName)+'update\updateload.inf'), 0, nil);
  except
    MessageDlg('Fehler beim downloaden der Update-Informationsdatei!'+#13+#10+'Download wird abgebrochen!', mtError, [mbOK], 0);
    exit;
  end;

// load current version
  AssignFile(VersionFile, ExtractFilePath(Application.ExeName)+'version.clf');
  Reset(VersionFile);
  readln(versionFile, aktVer);
  CloseFile(VersionFile);

// load updated version
  updateFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'update\updateload.inf');
  try
    newVer := updateFile.ReadString('update', 'newVersion', aktVer);
  finally
    updateFile.Free;
  end;

// check version-difference
  if aktVer = newVer then begin
    MessageDlg('Es ist keine neuere Version vorhanden!', mtInformation, [mbOK], 0);
    Exit;
  end;

  try
    updateFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'updates\updateload.inf');
    FileList := TStringList.Create;
    offFileList := TStringList.Create;
    try
      FileCount := updateFile.ReadInteger('files', 'count', 0);
      FileList.Sorted := true;
      MainFile := updateFile.ReadString('files', 'mainfile', '');
      for i:=1 to FileCount do begin
        FileList.Add(updateFile.ReadString('file'+IntToStr(i), 'filename', ''));
      end;
      for i:=0 to FileList.Count - 1 do begin
//        ForceDirectories(ExtractFilePath(Application.exeName)+'updates\'+newVer+'\');
        URLDownloadToFile(nil, PChar('http://www.chris-harms.de/sites/projects/updates/'+newVer+'/'+FileList[i]), PChar(ExtractFilePath(Application.exeName)+'update\'+FileList[i]), 0, nil);
        offFileList.Add(ExtractFilePath(Application.exeName)+'update\'+FileList[i]);
      end;
    finally
      updateFile.Free;
      FileList.Free;
    end;
  except
    MessageDlg('Fehler beim updaten der Dateien!'+#13+#10+'Update wird abgebrochen!', mtError, [mbOK], 0);
    exit;
  end;
  if MessageDlg('Es wurde eine aktuelle Version ('+newVer+') heruntergeladen.'+#13+#10+'Soll diese jetzt installiert werden?', mtWarning, [mbYes,mbNo], 0) = mrNo then begin
    DoFileWork(self.Handle, FO_DELETE, offFileList, nil, FOF_NOERRORUI);
    Exit;
  end;

  ShellExecute(0, 'open', PChar(ExtractFilePath(Application.exeName)+'update\'+MainFile), nil, nil, SW_SHOWNORMAL);
  offFileList.Free;
  Close;
end;
Hoffe auf schnelle Hilfe,
Chris

Christian Seehase 7. Dez 2002 21:22

Moin Chris,

da der Aufruf von URLDownloadToFile ja soweit korrekt aussieht, kann es eigentlich nur noch daran liegen, dass die Quellpfade Grossbuchstaben enthalten, dass kann, meines Wissens, nicht jeder Server verarbeiten.
Setz' die Quellpfade doch einfach mal in ein LowerCase(...).

Daniel B 7. Dez 2002 21:29

Hallo Christian,

die Idee ist nicht schlecht, aber wenn seine Dateien wirklich mit Grossbuchstaben geschrieben hat und dann mit Kleinbuchstaben "anfragt" gibt es glaub ich auch so rum probleme, nicht nur umgekehrt.

@Chris, welche Datei wird eigentlich nicht herunter geladen? Die Old oder die New? Schon mal Debuggt?

Grüsse, Daniel :hi:

Christian Seehase 7. Dez 2002 21:48

Moin Daniel B,

man sollte allerdings Dateien auf einem Webserver eh' nur mit Kleinbuchstaben benannt ablegen.
Dann stellt sich das Problem nicht ;-)

@Chris:
Da URLDownloadToFile keine Exception auslöst, kannst Du Dir zum einen den try/except Block dafür sparen, und lieber den Returncode abfragen.

Daniel B 7. Dez 2002 22:54

Hallo Christian,

Zitat:

Zitat von Christian Seehase
man sollte allerdings Dateien auf einem Webserver eh' nur mit Kleinbuchstaben benannt ablegen.

ACK.

Grüsse, Daniel :hi:

CalganX 8. Dez 2002 11:30

Hm.. Also die INF-Datei lädt er ohne Probleme herunter, nur die update.exe (die in der INF als MainFile und in files1 steht) wird nicht heruntergeladen.
Anstatt das Programm zu starten(, dass nicht da ist) öffnet er jetzt nur den Ordner "update". Ideen?

Chris

CalganX 8. Dez 2002 11:56

Ich habe alle Vorschläge eingebaut, aber es nichts gebracht. :cry:

Chris

Christian Seehase 8. Dez 2002 12:38

Moin Chris,

bringt URLDownloadToFile an jeder Stelle ein S_OK als Returncode?

MathiasSimmack 8. Dez 2002 12:48

Zitat:

Zitat von Chakotay1308
(die in der INF als MainFile und in files1 steht)

Wenn das mal nicht der Fehler ist, weil:
Code:
FileList.Add(updateFile.ReadString('file'+IntToStr(i), // <- "file", NICHT "files"
  'filename',
  ''));
end;
Denn abgesehen davon konnte ich von meiner Seite ein paar Dateien herunterladen, wobei ich den entsprechenden Download-Teil deiner Funktion 1:1 übernommen habe. :)


mfg

CalganX 8. Dez 2002 12:53

files1 war ein Tippfehler es muss schon file1 heißen...
URLDownloadToFile gibt immer S_OK zurück (laut Fehlerabfänger)!
Aber die Datei ist nicht da ([edit=Chakotay1308]Auf der Platte meine ich...[/edit])!

Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz