Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Probleme bei Download auf delphilosen Pc (https://www.delphipraxis.net/117922-probleme-bei-download-auf-delphilosen-pc.html)

Jeff93 28. Jul 2008 12:47


Probleme bei Download auf delphilosen Pc
 
Hallo,

habe eine Problem mit meinem kleinen Installationsprogramm, das die Dateien von meiner Homepage in einen Ordner kopieren soll. Dies klappt auch soweit, nur nicht auf meinem Pc. Mein Pc hat kein Delphi noch die dafür nötigen Installationen. Der Pc hat Windows Xp SP2.

Habe dies schon im Tutorial gepostet, ging leider in den Beiträgen unter und entschloss mich es in eingenen Thread zu stellen

Ist es vlt. ein Problem mit der uses UrlMo
Delphi-Quellcode:
const
  HELPURL = 'http://meinehomepage.de/help.ini';
Delphi-Quellcode:
procedure Tfrm_InstallVocTrainer.bbtn_installClick(Sender: TObject);
var
  Ziel, UFile : String;
  Ini        : TIniFile;
  loop, i    : Integer;

  function ExtractUrlFileName(Url:String) : String;
  var SPos : Integer;
  begin
    SPos  := Pos('/', Url);
    if SPos <> 0 then
    begin
      Result := ExtractUrlFileName(Copy(Url, SPos+1, Length(Url)-1));
    end
    else
    begin
      Result := Url;
    end;
  end;

begin
  if ed_InstallDir.Text='' then
    ed_InstallDir.Text := GetProgDir; //Gibt Ordner der Programme zurueck (C:\Programme\)
  Try
    Ziel := ed_InstallDir.Text+'VokabelTrainer\';
    UrlDownloadToFile(nil, HELPURL, PChar(Ziel+ExtractUrlFileName(HELPURL)), 0, nil);
  Except
    ShowMessage('Fehler bei Download');
  End;
  Ini := TIniFile.Create(Ziel+ExtractUrlFileName(HELPURL));
  Try
    Try
      i := Ini.ReadInteger('D-Files','FCount', 0);
      Memo1.Clear;
      Memo1.Lines.Add('Download gestartet'); //Diese beiden sind als einzige im Memo sichtbar
      Memo1.Lines.Add(''); //Diese auch, bin ratlos
      for loop := 1 to i do
      begin
        UFile := Ini.ReadString('D-Files', 'File'+IntToStr(loop), '');
        UrlDownloadToFile(nil, Pchar(UFile), PChar(Ziel+ExtractUrlFileName(UFile)), 0, nil);
        Memo1.Lines.Add(UFile+' nach:');
        Memo1.Lines.Add(Ziel+ExtractUrlFileName(UFile)+' gedownloadet');
      end;
    Except
      ShowMessage('Download fehlgeschlagen!');
    End;
  Finally
    Ini.Free;
  End;
end;
Die Ini sieht so aus
Code:
[D-Files]
FCOUNT=5
File1=http://meinehomepage.de/Options.ini
File2=http://meinehomepage.de/VocabularyTeacher.exe
File3=http://meinehomepage.de/s_neutral.bmp
File4=http://meinehomepage.de/s_right.bmp
File5=http://meinehomepage.de/s_wrong.bmp

matashen 28. Jul 2008 12:51

Re: Probleme bei Download auf delphilosen Pc
 
Wo liegt denn die ini

wenn die beim Programm liegt fehlen vieleicht entsprechende Rechte. XP und Vista ist da etwas pingelich.

Inis sollten immer im Userverzeichnis/Anwendungsdaten abgelegt werden

Gruß Matthias

Jeff93 28. Jul 2008 13:38

Re: Probleme bei Download auf delphilosen Pc
 
Ich hatte vor die help.ini in das Programmverzeichnis abzulegen (C:\Programme\VokabelTrainer\help.ini). Admin rechte besitze ich.

Edit: Auch wenn ich einen Ordner am Desktop auswähle funzt es nicht, doch dann müsste doch eine Exeption auftreten??

SirThornberry 28. Jul 2008 14:06

Re: Probleme bei Download auf delphilosen Pc
 
du schreibst das du ein Problem hast. Wo liegt das genau bzw. wie äußert es sich? Kommt eine Fehlermeldung? Wann ja welche? Wenn nicht, was passiert was hätte nicht passieren sollen?
Gibt dir URLDownloadToFile nichts zurück? Anhand des Namens würde ich vermuten das dir da ein Status zurück gegeben wird ob es geklappt hat oder nicht wenn nicht sogar direkt den Fehler.

Jeff93 28. Jul 2008 14:18

Re: Probleme bei Download auf delphilosen Pc
 
Das Problem äussert sich indem man im Memo sieht:
Code:
Download gestartet
Keine Exception auftritt und der Ordner leer bleibt, der Button wird aber wieder "losgelassen" und das Formular kann noch betätigt werden, schreibe momentan den Code um und versuche raise eine exception auszulösen wenn URlDownloadToFile nicht S_Ok zurückgibt (MSDN)

nat 28. Jul 2008 15:12

Re: Probleme bei Download auf delphilosen Pc
 
das sieht dann so aus als wenn deine for-schleife nicht ein einziges mal durchläuft.
lass dir mal den wert von i ausgeben. der wird sicher <= 0 sein.

Jeff93 28. Jul 2008 16:47

Re: Probleme bei Download auf delphilosen Pc
 
i ist 5^^

habe hier mal einen neuen Code geschrieben, doch mein Programm läuft unsauber, die Form verwackelt und mein alter Pc geht dabei fast drauf, wo kann ich noch ein paar Code-Schnipsel zur Optimierung einbauen?

Delphi-Quellcode:
procedure Tfrm_InstallVocTrainer.bbtn_installClick(Sender: TObject);
var
  Target, UrlFile, Path : String;

  //Name eines Datei im Url-Pfad ausgeben
  function ExtractUrlFileName(Url:String) : String;
  var SPos : Integer;
  begin
    SPos  := Pos('/', Url);
    if SPos <> 0 then
    begin
      Result := ExtractUrlFileName(Copy(Url, SPos+1, Length(Url)-1));
    end
    else
    begin
      Result := Url;
    end;
  end;

  //Fehlgeschlagener Download -> Exception auslösen
  function DownloadFile(AFrom, ATo : String) : Boolean;
  var
    Answer : Boolean;
  begin
    Result := True;
    Try
      UrlDownloadToFile(nil, Pchar(AFrom), PChar(ATo), 0, nil);
      Answer := FileExists(ATo);
      if not Answer then raise EDownloadError.Create('Der Download konnte nicht beendet werden');
    Except
      on E : EDownloadError do ShowMessage('Download fehlgeschlagen:'+#13#10+
                                           AFrom+' nach'+#13#10+ATo)
      else ShowMessage('Download fehlgeschlagen:'+#1310+AFrom+' nach'+#13#10+ATo);
      Result := False;
    End;
    Application.ProcessMessages;
  end;

procedure ReadIniFile(HelpIni : String);
  var
    Ini    : TIniFile;
    loop, i : Integer;
    Answer : Boolean;
  begin
    Ini := TIniFile.Create(HelpIni);
    Try
      Memo1.Lines.Add('Download gestartet');
      Memo1.Lines.Add('');
      i := Ini.ReadInteger('D-Files','FCount', 0); //Wieviele Dateien
      for loop := 1 to i do
      begin
        UrlFile := Ini.ReadString('D-Files', 'File'+IntToStr(loop), '');
        Answer := DownloadFile(UrlFile, Path + ExtractUrlFileName(UrlFile));
        if Answer then
        begin
          Memo1.Lines.Add('Download erfolgreich');
        end
        else
        begin
          Memo1.Lines.Add('Download von '+UrlFile+' fehlgeschlagen');
        end;
      end;
    Finally
      Ini.Free;
    End;
  end;

begin
  Memo1.Clear;
  //leeres Edit abfangen
  if ed_InstallDir.Text= '' then
    ed_InstallDir.Text := GetProgDir;


  Path := IncludeTrailingBackslash(ed_InstallDir.Text)+'VokabelTrainer\';
  ForceDirectories(Path);
  if DownloadFile(HELPURL, Path+ExtractUrlFileName(HELPURL)) then
  begin
    Memo1.Lines.Add('Hilfsdatei heruntergeladen');
    ReadIniFile(Path+ExtractUrlFileName(HELPURl));
  end;
end;
Mfg, Jeff

Edit: Ich glaube das Problem war vorher dass der Ordner nicht angelegt war dies habe ich mit FoceDirectory behoben.

nat 28. Jul 2008 16:58

Re: Probleme bei Download auf delphilosen Pc
 
URLDownloadToFile(..) blockt nunma deine anwendung solange es läuft/downloaded.
wenn du das verhindern willst würde ich n eigenen thread für die aufgabe erstellen.
der läuft/downloaded, aber deine anwendung reagiert noch normal.

Jeff93 28. Jul 2008 17:10

Re: Probleme bei Download auf delphilosen Pc
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok danke für deine Infos! Soll ich ein TThread Objekt benutzen oder CreateThread ??
Und noch eine Frage wie könnte ich einfach und schnell den Download per Button abbrechen?

Kann jemand bitte die Exe testen und posten ob es übertrieben lange dauert?

Ps: Hab's nochmal auf meinem altem Pc (der arme) probiert ist wieder fast zusammengebrochen

TurboMartin 28. Jul 2008 17:15

Re: Probleme bei Download auf delphilosen Pc
 
Die CodeLib hilft


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr.
Seite 1 von 2  1 2      

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